Проверьте, авторизован ли пользователь (HTTP Basic Authentication, Rails 3.0.9) - PullRequest
7 голосов
/ 03 октября 2011

Я использую HTTP Basic Authentication с Rails 3.0.9, и мне нужно проверить, авторизован ли пользователь показывать некоторые элементы в моих файлах html.erb. Как я могу это сделать?

Ответы [ 2 ]

10 голосов
/ 04 июня 2012

Подход Виталия выглядит как хорошее решение, но имеет серьезную ошибку, которая предоставляет доступ администратора всем, кто пытается войти, даже если их учетные данные неверны.(Публикация этого ответа в надежде, что за него проголосуют, и люди не будут слепо принимать «правильный» ответ с его недостатком безопасности)

Сначала пара функциональных тестов (для действий, требующих аутентификации):

test "admin is set with correct credentials" do
  @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "pass")
  get :index
  assert_response 200
  assert_equal true, session[:admin]
end

test "admin isn't set with incorrect credentials" do
  @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "incorrect")
  get :index
  assert_response 401
  assert_not_equal true, session[:admin]
end

Если вы запустите это с кодом Виталия, второй тест не пройден, потому что session[:admin] устанавливается в значение true, даже если пароль неправильный.

Вот мой код для правильной установки session[:admin] и пройдите оба теста:

private
def authenticate
  authenticate_or_request_with_http_basic do |user_name, password|
    session[:admin] = (user_name == "name" && password == "pass")
  end
end
0 голосов
/ 03 октября 2011

Вы можете заставить CanCan работать с базовой аутентификацией, прочитайте это руководство https://github.com/ryanb/cancan/wiki/changing-defaults,, затем просто используйте CanCan, как обычно, вы можете устанавливать разрешения на основе имени пользователя, вошедшего в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...