Rails 4.2.6 - Devise 4.2.2 - 默认身份验证

问题描述 投票:0回答:1

我希望设置一个辅助密码,通过该密码我可以验证用户是否可以从管理员登录。这样做的原因是前端是单页面应用程序。

每个用户都被赋予了一个唯一的login_as 字符串。现在我需要配置 Devise 来比较登录,就像密码失败一样。

如有任何帮助,我们将不胜感激。如果有更好的方法,我当然愿意接受替代解决方案。

谢谢。

ruby-on-rails devise single-page-application
1个回答
0
投票

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

关于此的博客

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.