【发布时间】:2013-11-20 17:02:18
【问题描述】:
我正在使用 authenticate_or_request_with_http_digest 在我的应用程序中进行简单的管理。如果管理员在登录时可以看到对象的所有 delete、edit 链接,但对普通用户隐藏这些链接,那就太好了。
该应用程序没有用户注册或多个用户的范围,因此在这种情况下设计或类似的身份验证平台似乎有点过头了。
我尝试在视图中使用authenticate 方法,就像使用 current_user 方法一样。但是,它会无限提示您登录,这并不理想。
有没有办法复制流行的current_user 方法来检查会话是否已创建并将其用作辅助方法?
application_controller.rb
helper_method :authenticate
USERS = { "username" => "password",
"APP" => Digest::MD5.hexdigest(["APP", "realm", "password"].join(":"))}
private
def authenticate
authenticate_or_request_with_http_digest(CONFIG[:realm]) do |username|
USERS[username]
end
end
在控制器中的使用
before_action :authenticate
更新
感谢 Peter Goldstein 的回答,我能够将身份验证块中的用户名保存到 session[:admin] 变量中,并在 current_user 辅助方法中使用它。
【问题讨论】:
-
您有与您的 USERS 哈希对应的用户模型吗?您如何确定用户是否是管理员?
-
没有用户模型或表,代码已从此处复制:api.rubyonrails.org/classes/ActionController/HttpAuthentication/…。这是最简单的身份验证形式,如果用户名和密码正确,您就可以登录。
-
对 - 但您是说管理员和非管理员之间存在区别。您如何根据用户名和密码确定用户是否为管理员? (注意:您复制的示例代码没有这种区别)
-
登录和不登录只有区别。如果您已登录,则可以执行某些操作,否则无法执行。
标签: ruby-on-rails ruby ruby-on-rails-4 basic-authentication