Выполнение базовой аутентификации 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}")
То же самое можно сделать с рельсами?
Спасибо заранее.
Ответы
Ответ 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.
Ответ 6
В этом разделе есть отличный Rails Cast
http://railscasts.com/episodes/82-http-basic-authentication
Ответ 7
Для последней версии rails существует ASCIIcast
, которая объясняет с помощью шагов HTTP Basic Authentication.
Ссылка идет здесь.
Боковое примечание: Следует предупредить, что базовая аутентификация HTTP передает имя пользователя и пароль в виде чистого текста, поэтому вы не должны использовать этот метод для приложений, где требуется более высокий уровень безопасности.