Подтвердить что ты не робот

Выполнение базовой аутентификации Http в рельсах

Привет, я нахожусь на фоне Grails и новичок в Rails. Я хочу сделать http basic authentication в rails.

У меня есть код в grails, который выполняет базовую аутентификацию следующим образом:

def authString = "${key}:".getBytes().encodeBase64().toString()
def conn = "http://something.net".toURL().openConnection()
conn.setRequestProperty("Authorization", "Basic ${authString}")

То же самое можно сделать с рельсами?

Спасибо заранее.

4b9b3361

Ответ 1

Напишите приведенный ниже код, в контроллере которого вы хотите ограничить использование http базовой аутентификации

class ApplicationController < ActionController::Base
  http_basic_authenticate_with :name => "user", :password => "password" 
end

Запрос с open-uri будет выглядеть так:

require 'open-uri'

open("http://www.your-website.net/", 
  http_basic_authentication: ["user", "password"])

Ответ 2

В Ruby on Rails 4 вы можете легко применять базовую HTTP-аутентификацию по всему сайту или к контроллеру в зависимости от контекста.

Например, если вам нужна аутентификация на сайте:

class ApplicationController < ActionController::Base
  http_basic_authenticate_with name: "admin", password: "hunter2"
end

Или для каждого контроллера:

class CarsController < ApplicationController
  http_basic_authenticate_with name: "admin", password: "hunter2"
end

Ответ 3

Я поддержал @Nishant ответ, но хотел добавить еще один лакомый кусочек. Вы всегда можете устанавливать фильтры, поэтому они применяются только к определенным действиям контроллера, передавая only или except следующим образом:

http_basic_authenticate_with name: "admin", password: "strongpasswordhere", only: [:admin, :new, :edit, :destroy]

или

http_basic_authenticate_with name: "admin", password: "strongpasswordhere", except: [:show]

Очень полезно во многих случаях.

Ответ 4

# app/controllers/application_controller.rb
  before_filter :http_basic_auth

  def http_basic_auth
    if ENV['HTTP_AUTH'] =~ %r{(.+)\:(.+)}
      unless authenticate_with_http_basic { |user, password|  user == $1 && password == $2 }
        request_http_basic_authentication
      end
    end
  end

а затем вам просто нужно экспортировать переменную среды с пользователем: например, пароль:

   export HTTP_AUTH=user:pass

если вы используете heroku.com:

   heroku config:set HTTP_AUTH=user:pass

Ответ 5

При подключении к конечным точкам HTTP, защищенным базовой HTTP-аутентификацией, я обычно использую HTTParty. HTTParty - простая оболочка для более низких классов STD Ruby, таких как net/http.

Пример использования HTTParty с базовым auth.

class Delicious
  include HTTParty
  base_uri 'https://api.del.icio.us/v1'

  def initialize(u, p)
    @auth = {username: u, password: p}
  end

  def recent options={}
    options.merge!({basic_auth: @auth})
    self.class.get('/posts/recent', options)
  end
end

delicious = Delicious.new("<username>", "<password>")

pp delicious.recent #=> list of recent elements

Проверьте более примеры на GitHub.

Ответ 7

Для последней версии rails существует ASCIIcast, которая объясняет с помощью шагов HTTP Basic Authentication.

Ссылка идет здесь.

Боковое примечание: Следует предупредить, что базовая аутентификация HTTP передает имя пользователя и пароль в виде чистого текста, поэтому вы не должны использовать этот метод для приложений, где требуется более высокий уровень безопасности.