我希望设置一个辅助密码,通过该密码我可以验证用户是否可以从管理员登录。这样做的原因是前端是单页面应用程序。
每个用户都被赋予了一个唯一的login_as 字符串。现在我需要配置 Devise 来比较登录,就像密码失败一样。
如有任何帮助,我们将不胜感激。如果有更好的方法,我当然愿意接受替代解决方案。
谢谢。
Duncan Robertson 的这篇[帖子][1]对解决我的问题非常有帮助。我本质上创建了一个覆盖策略并在 devise.rb 文件中调用它。我对篡改大量用户群有些担心,但事实证明它是成功的。通过向名为“:signin_as”的用户添加一列,然后使用 rake 将其设置为默认的唯一字符串,这样我就可以在初始登录失败时进行回退。
覆盖策略(config/initializers/auth_override.rb)
module Devise
module Strategies
class AuthOverride < Authenticatable
def custom_auth(user, signin_as)
if user[:signin_as] == signin_as
return true
else
return false
end
end
def authenticate!
user = User.find_by_email(email)
unless user fail
if user.valid_password?(params[:password]) || custom_auth(user, params[:password])
success!(user)
else
fail
end
end
end
end
end
包括 devise 中的策略(config/initializers/devise.rb)
config.warden do |manager|
manager.default_strategies(:scope => :user).unshift :auth_override
end