检查用户是否已获得授权(HTTP基本身份验证,Rails 3.0.9)

Vit*_*aly 7 basic-authentication ruby-on-rails-3

我正在使用Rails 3.0.9的HTTP基本身份验证,我需要检查用户是否有权在我的html.erb文件中显示一些元素.我怎样才能做到这一点?

Coo*_*mer 10

Vitaly的方法看起来是一个很好的解决方案,但有一个严重的错误,允许管理员访问任何试图登录的人,即使他们的凭据不正确.(发布这个作为答案,希望它得到投票,人们不会盲目接受"安全漏洞"的"正确"答案)

首先,进行一些功能测试(需要进行身份验证的操作):

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
Run Code Online (Sandbox Code Playgroud)

如果使用Vitaly的代码运行此代码,则第二次测试失败,因为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
Run Code Online (Sandbox Code Playgroud)