刷新 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