2015-10-25 37 views
7

對於Accounts.forgotPassword()Accounts.sendVerificationEmail(),生成令牌。帳號密碼電子郵件令牌是否過期?

該令牌是否過期?
如果是這樣,過了幾段時間?

+0

'verificationToken'有一個創建時間戳,但沒有到期時間戳afaict。我知道驗證令牌或密碼重置令牌只能使用一次。 –

+0

有趣的是,如果我使用了兩次令牌(再次點擊郵件鏈接),我得到這個錯誤消息:「錯誤:令牌過期[403]」誤導性措辭。 – Artfree

+0

邁克爾 - 是否有可能獲得對verificationToken創建時間戳的訪問?如果是這樣,我可以創建我自己的令牌到期例程。謝謝。 – Artfree

回答

1

目前沒有與令牌過期有關的內置代碼,既沒有設置過期時間也沒有強制執行它。

電子郵件重置數據(令牌,電子郵件和令牌創建日期)被保存在用戶的記錄,因爲在the source可以看出:

var tokenRecord = { 
    token: token, 
    email: email, 
    when: when 
}; 
Meteor.users.update(userId, {$set: { 
    "services.password.reset": tokenRecord 
}}); 

因此,日期是在以下蒙戈選擇:

'services.password.reset.when' 

不幸的是,所有的reset數據,只要resetPassword方法被調用正確的標記未設置。

這使得不可用的validateLoginAttempt回調:

Accounts.validateLoginAttempt(function(options) { 
    if (options.methodName === 'resetPassword' && options.allowed === true) { 
    console.log('resetPassword', options.user.services.password.reset); //undefined 
    } 
    return true; 
}); 

類似地,電子郵件驗證令牌被存儲在user.services.email.verificationTokens,這(如果設置)是令牌記錄數組。

的日期,因此,在

'services.email.verificationTokens.when' 

你可以,但是,與此信息定期很容易失效老令牌,或推出自己的本地叉子或賬戶密碼包。

+0

'when'因此給出了創建令牌的日期,而不是它將過期的日期。您是否設法在抓取代碼時找到有關自動的,可能基於時間的令牌過期的數據? –

+0

沒有使令牌過期的代碼。例如,您應該推出自己的產品,創建每小時運行一次並刪除舊令牌。您可能還需要更改重置密碼電子郵件模板以反映該情況。 – MasterAM

+0

當然,您始終可以分支帳戶密碼或覆蓋其方法處理程序並在其中注入此功能。 – MasterAM

相關問題