我有两种用户类型,管理员和客户,我一直试图让客户与他们的用户名登录独家,而保持管理员不受影响(即:,仍然登录他们的电子邮件)。我已经完成了在客户登录/注册时删除电子邮件的过程。但事实证明,这个过程也影响了管理员——他们不能再用电子邮件登录了。
问题是我找不到一种方法来改变设计的配置选项在运行时从
Config.authentication_keys = [ :username ] #For customers
:
Config.authentication_keys = [ :email ] #For admins
基于名称空间。
有可能这样做吗?
p。S:我尝试将Proc.new {#block}
注入Config.authentication_keys
以添加一些逻辑到配置选项,但由于设计期望该选项是数组,因此失败。
config.authentication_keys = Proc.new { [ :email ] }
在使用devise_parameter_sanitizer.for(:sign_up) << [..]
消毒参数时失败,出现此错误
undefined method `+' for #<Proc:0x5d872a0>
您可以为User
模型重写find_first_by_auth_conditions
方法:
# app/models/user.rb
def self.find_first_by_auth_conditions(conditions, opts={})
if admin?
find_by(email: conditions[:login])
else
find_by(username: conditions[:login])
end
end
# config/initializers/desvise.rb
Devise.setup do |config|
config.authentication_keys = [:login]
注::例如mongoid
,我不记得如何调用AR查找