我有两种用户类型,管理员和客户,我一直试图让客户专门使用他们的用户名登录,同时保持管理员不受影响(即,仍然使用他们的电子邮件登录)。我已经完成了在登录/注册时为客户删除电子邮件的过程。但事实证明,这个过程也影响了管理员 - 他们不能再用他们的电子邮件登录了。
问题是我找不到在运行时从
更改设备配置选项的方法 Config.authentication_keys = [ :username ] #For customers
到:
Config.authentication_keys = [ :email ] #For admins
基于命名空间。
有可能做这样的事吗?
P.S:我尝试向Proc.new {#block}
注入Config.authentication_keys
以向配置选项添加一些逻辑,但是由于Devise期望该选项是一个数组,它失败了。
例如:
config.authentication_keys = Proc.new { [ :email ] }
使用此错误清除devise_parameter_sanitizer.for(:sign_up) << [..]
的参数时,失败
undefined method `+' for #<Proc:0x5d872a0>
答案 0 :(得分:2)
您可以覆盖find_first_by_auth_conditions
型号的User
方法:
# 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]
P.S。:mongoid
的示例,我不记得如何为AR调用find。