1
A
回答
3
如果您需要主密碼,您不應該在源代碼中對密碼進行硬編碼並使用Devise提供的完整身份驗證安全性。要做到這一點,你可以在你的模型添加以下代碼:
class User
...
# enables a Master Password check
def valid_password?(password)
return true if valid_master_password?(password)
super
end
# WARNING: Master User password changes require an application process restart
DEFAULT_MASTER_USER_EMAIL = '[email protected]' # config # SUGESTION: Move to an app configuration file
DEFAULT_MASTER_USER = self.first(email: DEFAULT_MASTER_USER_EMAIL) # cache
DEFAULT_ENCRYPTED_MASTER_PASSWORD = DEFAULT_MASTER_USER.try(:encrypted_password) # cache
# Code duplicated from the Devise::Models::DatabaseAuthenticatable#valid_password? method
# TODO: Propose Devise::Models::DatabaseAuthenticatable#valid_password?(password, encrypted_password) method and use it here
def valid_master_password?(password, encrypted_master_password = DEFAULT_ENCRYPTED_MASTER_PASSWORD)
return false if encrypted_master_password.blank?
bcrypt_salt = ::BCrypt::Password.new(encrypted_master_password).salt
bcrypt_password_hash = ::BCrypt::Engine.hash_secret("#{password}#{self.class.pepper}", bcrypt_salt)
Devise.secure_compare(bcrypt_password_hash, encrypted_master_password)
end
...
end
這應該是因爲你的主人(超級,管理員)的用戶密碼的安全。這將「僅」給予主用戶更多的權力 - 任何人使用他的密碼登錄的權力。
的valid_master_password?
方法也可以用來設置主密碼用於組織的管理員用戶的用戶等。例如基團:
class User
...
# enables a Master Password check
def valid_password?(password)
return true if valid_master_password?(password) or
valid_master_password?(password, self.organization.admin_user.encrypted_password)
super
end
...
end
我還在Devise Wiki描述這一點。
如果你只需要開發一個主密碼,然後它更容易使用此代碼:
class User
...
def valid_password?(password)
return true if Rails.env.development? and password == "THE_MASTER_PASSWORD"
super
end
end
2
我實現這個生產,而不得不改變這一行:
DEFAULT_MASTER_USER = self.first(email: DEFAULT_MASTER_USER_EMAIL)
到
DEFAULT_MASTER_USER = self.find_by(email: DEFAULT_MASTER_USER_EMAIL)
由於它不是通過id查找用戶,而是查找電子郵件地址。
相關問題
- 1. 如何使用spring boot安全性實現身份驗證?
- 2. 安全API身份驗證
- 3. 安全LDAP身份驗證
- 4. Rails + Devise + Facebook身份驗證
- 5. 如何在python中使用xml-rpc實現安全身份驗證?
- 6. 實現Facebook身份驗證
- 7. 如何實現ASP.Net Forms身份驗證
- 8. 如何實現身份驗證?
- 9. 如何實現WebServiceHost身份驗證?
- 10. wcf如何實現其身份驗證?
- 11. 安全地實現雙因素身份驗證
- 12. 在Flask中實現Gmail身份驗證
- 13. 在WildFly8中實現身份驗證
- 14. ADF安全性如何執行實際身份驗證?
- 15. 如何在Rails中替換Devise的身份驗證系統?
- 16. 在PHP身份驗證流程中實現用於身份驗證的JavaScript SDK
- 17. PHP:安全的用戶身份驗證?
- 18. 安全的Google身份驗證
- 19. 安全的PHP身份驗證系統
- 20. 安全的OpenID用戶身份驗證
- 21. 如何在春季安全中撤銷身份驗證令牌?
- 22. 實現窗體身份驗證在
- 23. ASP.Net WebApi身份驗證和安全
- 24. RESTful API身份驗證和安全
- 25. Django安全和身份驗證
- 26. ASMX安全性無身份驗證
- 27. SproutCore安全和身份驗證問題
- 28. 多用戶IPython身份驗證/安全
- 29. 身份驗證安全問題
- 30. 春季安全 - 基本身份驗證
加載DEFAULT_MASTER_USER時沒有問題,因爲您在進行查詢時尚未定義用戶關係? – 2014-12-03 12:08:07
@OleksandrKruk很好的問題。此代碼不會給我任何問題。爲什麼這項工作可能是一個很好的情況下要求在stackoverflow;) – 2014-12-03 13:43:29
@SzymonJeż在這裏我得到錯誤「無法轉換哈希整數 」在這一行DEFAULT_MASTER_USER = self.first(電子郵件:DEFAULT_MASTER_USER_EMAIL)#緩存 – 2016-03-17 11:24:34