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)
归档时间: |
|
查看次数: |
3467 次 |
最近记录: |