2016-09-20 100 views
0

我期待設置一個二級密碼,通過它我可以從admin身份驗證用戶的登錄身份。這項工作的原因是前端是單頁應用程序。Rails 4.2.6 - 設計4.2.2 - 默認驗證

給每個用戶一個唯一的login_as字符串。現在我需要配置Devise來比較login_as,如果密碼失敗。

任何幫助表示讚賞。如果有更好的方法,我當然可以選擇另一種解決方案。

謝謝。

回答

0

Duncan Robertson的post對解決我的問題非常有幫助。我基本上創建了一個覆蓋策略,並在devise.rb文件中調用它。我有一些關於篡改大量用戶羣的擔憂,但它已被證明是成功的。通過向名爲「:signin_as」的用戶添加一列,然後使用rake將其設置爲默認的唯一字符串,然後在初始登錄失敗時擁有我所需的備份。

超控策略(配置/初始化/ 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) 
     if user 
      if user.valid_password?(params[:password]) 
      success!(user) 
      elsif custom_auth(user, params[:password]) 
      success!(user) 
      else 
      fail 
      end 
     else   
      fail 
     end 
     end 
    end 
    end 
end 

包括色器件策略(配置/初始化/ devise.rb)

config.warden do |manager| 
    manager.default_strategies(:scope => :user).unshift :auth_override 
end