Ruby on rails 设备中config.authentication_密钥和config.request_密钥之间的差异

Ruby on rails 设备中config.authentication_密钥和config.request_密钥之间的差异,ruby-on-rails,ruby,authentication,devise,Ruby On Rails,Ruby,Authentication,Devise,在designe.rb中,对这两种配置的描述让我感到困惑: #配置验证用户时使用的密钥。默认值只是:email。您可以将其配置为使用[:username,:subdomain],因此要验证用户,这两个参数都是必需的。请记住,这些参数仅在进行身份验证时使用,而在从会话检索时不使用。如果您需要权限,则应在before筛选器中实现该权限。您还可以提供一个哈希值,其中该值是一个布尔值,用于确定当该值不存在时是否应中止身份验证 # config.authentication_keys = [ :email

在designe.rb中,对这两种配置的描述让我感到困惑:

#配置验证用户时使用的密钥。默认值只是:email。您可以将其配置为使用[:username,:subdomain],因此要验证用户,这两个参数都是必需的。请记住,这些参数仅在进行身份验证时使用,而在从会话检索时不使用。如果您需要权限,则应在before筛选器中实现该权限。您还可以提供一个哈希值,其中该值是一个布尔值,用于确定当该值不存在时是否应中止身份验证

# config.authentication_keys = [ :email ]
#从用于身份验证的请求对象配置参数。给出的每个条目都应该是一个请求方法,它将自动传递给find_for_身份验证方法,并在模型查找中加以考虑。例如,如果将:request_keys设置为[:subdomain],:subdomain将用于身份验证。对于身份验证密钥提到的相同注意事项也适用于请求密钥

# config.request_keys = []

不知道它们之间到底有什么区别,什么时候使用什么,有人能给我一个帮助吗?

主要区别似乎是更改
config.authentication\u key
会导致用户需要其他/不同的参数,而将值添加到
config.request\u keys
会根据用户浏览器发送的“请求”信息进行身份验证,从而创建用户的附加身份验证。用户浏览器发送的请求的各个方面将用于身份验证过程

例如,其子域记录为“firstdomain.example.com”的用户将无法通过“seconddomain.example.com”登录。这不会自动发生,您必须覆盖“查找\u以进行\u身份验证”方法。假设您的用户模型称为“用户”,并且您希望在电子邮件身份验证之外添加子域身份验证,它可能看起来像这样(取自Desive wiki):

#app/models/user.rb
类用户warden_条件[:email],:subdomain=>warden_条件[:subdomain])。首先
结束
结束
另一方面,
config.authentication\u keys
用于要求用户提供额外的参数(如要求电子邮件和用户名),或用于更改允许用户使用的参数(即使用用户名而不是电子邮件)

其他一些背景:

# 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