「數據」 在Rails會是這樣的:Rails/Devise會話中的管理員數據由什麼組成?
{"warden.user.user.key" => [[1], "long-random-string"]}
1是用戶ID。什麼是長隨機字符串?
這是由Rails或Devise處理/使用的東西嗎?
「數據」 在Rails會是這樣的:Rails/Devise會話中的管理員數據由什麼組成?
{"warden.user.user.key" => [[1], "long-random-string"]}
1是用戶ID。什麼是長隨機字符串?
這是由Rails或Devise處理/使用的東西嗎?
當你登錄一個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_password
。 Devise
存儲部分encrypted_password
,因爲它更可靠,而不是暴露會話中的完整encrypted_password(即使其已加密)。這就是爲什麼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請求是無狀態的,因此不可能告訴某個請求實際上來自該登錄的特定用戶?這就是爲什麼會話很重要,因爲它們允許應用程序將登錄用戶從一個請求跟蹤到另一個請求,直到會話過期。
謝謝!你能告訴我更多關於這個部分加密的密碼嗎?爲什麼它是部分的而不是完整的?何時/何時使用?它由Devise,Rails還是兩者使用? –
(或隨時引導我到某處閱讀有關此 - 但我無法找到一個好的解釋器在任何地方) –
@JohnBachir請閱讀我更新的答案。希望它能幫助你理解。 –