2017-06-05 3 views
1

私はMeteorでリセットパスワード画面を構築していますが、ユーザーにフォーム(パスワード+パスワードの確認)に記入して送信ボタンをクリックする前に、リセットされたパスワードトークンが期限切れかどうかを検出したいと思います。それはちょうど良いUXのように思えます。メテオ:提出前にトークンが期限切れになっていないかどうかを検出しますか?

しかし、トークンを渡してそれが有効かどうかを確認するためのメテオのドキュメントには、どのような方法やヘルパーも見つからないようです。私が見つけることができる唯一のことは、ユーザーがサブミットした後にトークンが期限切れになったというエラーメッセージです。それは、最初からそれがうまくいかないことを知っていたときにフォームに記入する時間を取って、顧客に迷惑をかける可能性があります。彼らはその後、新しいリンクを取得し、フォームを再入力する必要があります。

メテオでこれを行うより良い方法はありませんか?

答えて

0

トークンがまだ有効かどうかを確認することはかなり簡単です。

あなたはの行に何かを行うことができます:

accounts-passwordパッケージのコードから適応
Meteor.methods({ 
    checkResetToken(token) { 
    check(token, String); 

    const user = Meteor.users.findOne({ 
     "services.password.reset.token": token}); 
    if (!user) { // never existed or already been used 
     throw new Meteor.Error(403, "Token expired"); 
    } 

    const when = user.services.password.reset.when; 
    const reason = user.services.password.reset.reason; 
    let tokenLifetimeMs = Accounts._getPasswordResetTokenLifetimeMs(); 
    if (reason === "enroll") { 
     tokenLifetimeMs = Accounts._getPasswordEnrollTokenLifetimeMs(); 
    } 
    const currentTimeMs = Date.now(); 
    if ((currentTimeMs - when) > tokenLifetimeMs) { // timeout 
     throw new Meteor.Error(403, "Token expired"); 
    } 

    // you can return some of the user's details to further improve the UX. 
    } 
}); 

トークンがまだ有効かどうかを判断して、サーバーからユーザーの詳細を取得する(たとえば、登録トークンであるか、ユーザーの名前/電子メールであるかなど)ためにクライアントサイドフックで使用します)を使用して、よりパーソナライズされたビューを表示します。

userにはすべての秘密フィールドが含まれているため、すべての秘密フィールドをクライアントに返すわけではありません。

+0

恐ろしい答え、どうもありがとう! –

関連する問題