2016-11-29 7 views
1

Webアプリケーション用のトークンベース認証システムを作成しましたが、トークンフィールドの有効期限が必要です。 tokenを保持userモデルは以下の通りです:特定のフィールドのMongoose add expires属性

module.exports = (function() { 

    var userSchema = new Schema({ 
    phone: String, 
    token: { 
     value: { type: String, lowercase: true, trim: true } 
    }, 
    verificationCode: Number, 
    createdAt: { type: Date, default: Date.now() } 
    }); 

    var User = mongoose.model('User', userSchema); 

    return User; 

})(); 

私は疑問に思ってtokenフィールドの有効期限属性を持っているどのような方法があります。実は私は、トークンの有効期限が切れているかどうかを確認するために私のコードでは、以下のようなものを持ちたい:@dyoubergこれを持ち出すため

User.findOne({}, function(err, user) { 
    if (user.token.isExpired()) { 
    // do something! 
    } 
}); 
+0

トークン・モデルに有効期限(日付)isExpired(ブール)フィールドを入れて、n'mins/sec /時間ごとにトリガーする小さなジョブを実行して、現在の日時トークンに設定された有効期限を過ぎています。 –

+1

また、トークンコレクションのTTLインデックスを使用して、一定の時間が経過した後でトークンを自動的に削除することもできます。 – dyouberg

答えて

1

感謝。はい@sadrzadehsinaあなたはTTLインデックスも使うことができますが、ここでは要件の観点からの唯一の欠点は、ドキュメントがTTL mongodbを渡すとドキュメントをコレクションから削除することです。おそらくTTLが最良の選択肢でしょう。すべてがmongodb自体によって注意を払われるからです。コレクションにインデックスを作成するだけです。

ドキュメントを保管することを意図している場合は、TTLは役に立たないかもしれませんが、単純なロジックを構築することができます(コメントにあります)。

+0

あなたの解答はそれほど効率的ではありません。 10分後にトークンが期限切れになるようにするため、10分ごとにチェックするトリガーを作成すると、トークンが11:00:00に作成され、最後のトリガーチェックが10時に発生したと考えてください。 55:00午前の場合、トークンの有効期限は10分ではなく15分になります。それは11:05:00にチェックし、期限切れではなく、11:15:00にもう一度チェックします。これは私が望むものではありません。 – sadrzadehsina

+0

しかし私の場合、TTLインデックスが解決策です。私はすべてのトークンを格納するための別のドキュメントを持つことができ、ユーザードキュメントのinを参照することができるからです。私はトークンを削除し、ユーザーにTTLインデックスを保持させることができます。 – sadrzadehsina

+0

TTLがあなたのやり方をすることは素晴らしいことです。 –

関連する問題