【问题标题】:Current_user method for authenticate_or_request_with_http_digest - Rails 4用于 authenticate_or_request_with_http_digest 的 Current_user 方法 - Rails 4
【发布时间】:2013-11-20 17:02:18
【问题描述】:

我正在使用 authenticate_or_request_with_http_digest 在我的应用程序中进行简单的管理。如果管理员在登录时可以看到对象的所有 deleteedit 链接,但对普通用户隐藏这些链接,那就太好了。

该应用程序没有用户注册或多个用户的范围,因此在这种情况下设计或类似的身份验证平台似乎有点过头了。

我尝试在视图中使用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


【解决方案1】:

类似这样的:

def authenticate
   current_user_name = nil
   is_authenticated = authenticate_or_request_with_http_digest(CONFIG[:realm]) do |username|
     current_user_name = username
     USERS[username]
   end
   @current_user = current_user_name if is_authenticated
   is_authenticated
end

def current_user
  @current_user
end
helper_method :current_user

应该从 HTTP 摘要请求中捕获用户名并使其在 current_user 方法中可见

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多