2014-06-05 43 views
0

紅寶石「1.9.3」設計確認再次發送「登錄不能爲空」錯誤與確認的鏈接從電子郵件有「確認令牌無效」錯誤

「軌道」,「3.2.13」

「devise」,'〜> 3.2.2'

我在不修改的情況下使用Devise確認控制器。我創建了一個用戶併發送了電子郵件。然後點擊鏈接確認「確認令牌無效」結果。電子郵件中的標記與數據庫中的標記相同。

此外,當用戶在註冊編輯我提供了一個鏈接重新發送確認電子郵件。這會使用戶收到確認新消息,並填寫電子郵件,然後單擊「重新發送確認說明」按鈕並收到錯誤「登錄不能爲空」。用戶已登錄,否則他們將無法訪問用戶/編輯或用戶/確認/新建。

我已配置設計接受用戶名或電子郵件登錄。

+0

您的意思是說,url中的確認標記與該用戶的數據庫中的confirmation_token列相同?此外,用戶不需要登錄就可以訪問用戶/確認/新建。未登錄的用戶可以默認重新發送確認電子郵件。 – Tim

+0

正確他們是相同的。我知道應該不需要登錄確認/新建。 電子郵件: Confirm my account 數據庫: users.confirmation_token = 716276a13f8200b2e79e9c84c9b6ce9a718018dda37752525b27af6958300176 –

+0

在設計3.1,原來標記插入默認的郵件模板(如果您使用它)和加密版本存儲在數據庫中,所以他們不該」 t是相同的(除非在使用'config.allow_insecure_token_lookup'時升級設計之前生成的db中的令牌)。它看起來像您發佈的鏈接中的令牌是加密的形式,而不是原始令牌。您是否覆蓋了確認電子郵件模板?如果是這樣,你需要使用'@ token',它通過devise傳入模板,而不是'@ resource.confirmation_token'。 – Tim

回答

0

在密碼重置期間,確保在發送特定密碼更改令牌時,針對用戶記錄的resent_password_sent_at列必須設置爲Time.now/time。

raw, enc = Devise.token_generator.generate(@user.class, :reset_password_token) 
@user.update_attributes(reset_password_token: enc, reset_password_sent_at: Time.now) 
+0

感謝您的回覆。我的問題是電子郵件確認過程。當用戶點擊「確認我的帳戶」鏈接時,出現錯誤「確認令牌無效」 –

+0

是的,那只是。即使你設置的令牌仍然會如何設計將它識別爲最新的令牌或舊的令牌,因此我們需要將rest_password_sent_at標誌更新爲當前時間(或令牌被髮送的時間)..可將其視爲可用代幣! – Ajay