2014-05-11 51 views

回答

27

當你登錄一個user(設計模型名稱User),一鍵"warden.user.model_name.key"創建而你的情況是"warden.user.user.key"

例如:

{ warden.user.user.key => [[1], "$2a$10$KItas1NKsvunK0O5w9ioWu"] } 

其中

1是登錄用戶的id

$2a$10$KItas1NKsvunK0O5w9ioWu又名long-random-string是用戶的部分加密的密碼 ID爲1

您可以通過在rails console和執行

User.find(1).encrypted_password 
## => "$2a$10$KItas1NKsvunK0O5w9ioWuWp4wbZ4iympYMqVCRmmvTGapktKqdMe" 

UPDATE

你能告訴我多一點關於這個部分加密密碼驗證呢?爲什麼它是局部的而不是完整的?

要回答在評論你上面的問題,通過調用authenticatable_salt方法Devise存儲在會話中的部分encrypted_passwordDevise存儲部分encrypted_password,因爲它更可靠,而不是暴露會話中的完整encrypted_pa​​ssword(即使其已加密)。這就是爲什麼encrypted_password的前30個字符[0,29]被提取並存儲在會話中。

# A reliable way to expose the salt regardless of the implementation. 
    def authenticatable_salt 
    encrypted_password[0,29] if encrypted_password 
    end 

你可以看到authenticatable_salt這裏的代碼。

其中/何時使用?它由Devise,Rails還是兩者使用?

它是利用Devise認證目的,以驗證特定用戶是否已登錄。比較理想的使用情況是,一個特定的Rails應用程序如何跟蹤用戶是如何登錄時,請求新頁面。由於HTTP請求是無狀態的,因此不可能告訴某個請求實際上來自該登錄的特定用戶?這就是爲什麼會話很重要,因爲它們允許應用程序將登錄用戶從一個請求跟蹤到另一個請求,直到會話過期。

+0

謝謝!你能告訴我更多關於這個部分加密的密碼嗎?爲什麼它是部分的而不是完整的?何時/何時使用?它由Devise,Rails還是兩者使用? –

+0

(或隨時引導我到某處閱讀有關此 - 但我無法找到一個好的解釋器在任何地方) –

+1

@JohnBachir請閱讀我更新的答案。希望它能幫助你理解。 –