刷新 MongoDB 中的令牌

Posted

技术标签:

【中文标题】刷新 MongoDB 中的令牌【英文标题】:Refresh Tokens in MongoDB 【发布时间】:2020-05-07 12:02:17 【问题描述】:

从 MongoDB 自动删除刷新令牌的最佳解决方案是什么。

登录时,用户会获得一个持续 30 秒的临时身份验证令牌。他们还获得了一个永久令牌,存储在 MongoDB 中,目前一直持续到他们注销。

我想在每天结束时删除永久的,但我不确定如何在没有运行 cron 作业的情况下执行此操作(以监控现在是什么时间)。对于这么小的任务,这似乎有点复杂。有没有办法 mongo 知道时间是什么然后删除刷新令牌?

这是令牌集合的外观:

谢谢

【问题讨论】:

【参考方案1】:

NodeJS、mongodb。 只需为每个令牌创建一个模型。

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const tokenSchema = new Schema(
    _userId: 
      type: Schema.Types.ObjectId,
      required: true,
      ref: 'user'
    ,
    token: 
      type: String,
      required: true
    ,
    expireAt: 
      type: Date,
      default: Date.now,
      index:  expires: 60*60*24 
    
)

module.exports = mongoose.model('tokens', tokenSchema)

【讨论】:

【参考方案2】:

要在一段时间后自动删除 MongoDB 文档,您应该使用记录在 here 中的 TTL(生存时间)收集功能。

本质上,您需要在存储令牌文档的集合上创建一个索引。对于您的用例,您可以执行以下操作:

// This would delete the tokens document after 3600seconds after creation
// You can tweak the time as you wish. 
db.tokens.createIndex( "createdAt": 1 ,  expireAfterSeconds: 3600 );

【讨论】:

以上是关于刷新 MongoDB 中的令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 在不刷新站点的情况下更改 mongoDB 中的某些项目

如何使用两个令牌(访问/刷新)进行授权(nodejs,express)

聚合函数在页面刷新时复制 ng-repeat 中的项目。需要弄清楚如何停止重复。 Angularjs Mongodb mongoose

Nodejs/mongodb - 检查用户是不是具有管理员权限(基于令牌的身份验证)

MongoDB中一些命令

JWT 令牌未在 $resource 中的标头上设置