Dam*_*uan 6 ruby authentication ruby-on-rails devise
在 devise.rb 中,这两个配置的描述让我感到困惑:
# 配置认证用户时使用哪些密钥。默认值只是 :email。您可以将其配置为使用 [:username, :subdomain],因此要对用户进行身份验证,这两个参数都是必需的。请记住,这些参数仅在身份验证时使用,而不是在从会话中检索时使用。如果您需要权限,您应该在 before 过滤器中实现它。您还可以提供一个哈希值,其中该值是一个布尔值,用于确定在该值不存在时是否应中止身份验证。
# config.authentication_keys = [ :email ]
Run Code Online (Sandbox Code Playgroud)
# 配置用于认证的请求对象的参数。给出的每个条目都应该是一个请求方法,它将自动传递给 find_for_authentication 方法并在您的模型查找中考虑。例如,如果您将 :request_keys 设置为 [:subdomain],则 :subdomain 将用于身份验证。为 authentication_keys 提到的相同注意事项也适用于 request_keys。
# config.request_keys = []
Run Code Online (Sandbox Code Playgroud)
不知道它们之间究竟有什么区别以及何时使用什么,谁能给我帮助?
主要区别似乎是更改config.authentication_keys会导致用户需要额外/不同的参数,而将值添加到config.request_keys通过对用户浏览器发送的“请求”信息进行身份验证创建用户的额外身份验证。用户浏览器发送的请求的各个方面将用于身份验证过程。
例如,子域记录为“firstdomain.example.com”的用户将无法通过“seconddomain.example.com”登录。这不会自动发生,您必须覆盖“find_for_authentication”方法。假设您的用户模型被称为“用户”,并且除了电子邮件身份验证之外,您还想添加子域身份验证,它可能看起来像这样(取自设计维基):
# app/models/user.rb
class User < ActiveRecord::Base
def self.find_for_authentication(warden_conditions)
where(:email => warden_conditions[:email], :subdomain => warden_conditions[:subdomain]).first
end
end
Run Code Online (Sandbox Code Playgroud)
另一方面config.authentication_keys用于要求用户提供额外的参数(例如要求电子邮件和用户名)或用于更改他们允许使用的参数(即使用用户名而不是电子邮件)。
一些额外的上下文: