gpt4 book ai didi

node.js - Loopback 3中刷新AccessToken

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:03 24 4
gpt4 key购买 nike

我最近在 LoopBack3 中启动了一个项目,我正在使用集成的环回身份验证,并且我需要在 ttl 时间结束后刷新 AccessToken。

我已经搜索了环回文档和互联网,但我还没有找到一种方法。我尝试在 server/server.js 中创建一个中间件,并直接使用连接器(MySql)进行查询并更新“已创建”字段,但它似乎执行更新时没有错误,但它不会更改数据库中的值


// Array with the paths that I want to apply the middleware
var aPaths = [...];

//Middleware in server.js
app.use(aPaths,async function (req, res, next) {
const connector = app.dataSources.myDataSource.connector;
if (!req.headers.authorization || req.headers.authorization == '') {

return res.status(403).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });

}else{

var sql = "SELECT * FROM AccessToken where id = '" + req.headers.authorization + "'";
connector.execute(sql, null, async (err, resultObject) => {

if (!err && resultObject) {
if (resultObject.length > 0) {

const date1 = new Date(Date.now());
const date2 = new Date(String(resultObject[0].created));
var diffTime = Math.abs(date1.getTime() - date2.getTime());

// Difference between the creation date and the current date (In minutes)
diffTime = diffTime / (1000 * 60);

// Token validity in minutes
var token_validity = resultObject[0].ttl / 60;

// If the token is still valid, do nothing
if (token_validity > diffTime) {
next();
}else{
// If the token expired in less than 10 minutes I want to refresh it
if ((diffTime - token_validity) < 10) {
var sql = "UPDATE AccessToken SET created= NOW() WHERE id = '" + req.headers.authorization + "'";
console.log("SQL: " + sql);
try {
await connector.execute(sql, null, (err) =>{
if (error){
console.log(err);
return res.status(401).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });
} else {
next();
}
});
} catch(err) {
console.log(err);
return res.status(401).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });
}
} else {
return res.status(401).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });
}
}
} else {
return res.status(401).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });
}
} else {
return res.status(401).json({ error : {code:'AUTHORIZATION_REQUIRED',statusCode:401} });
}
});
}
});

如果 token 在 10 分钟内过期,我想更新该 token ,但这样我得到:

错误:访问 token 无效

因为它继续执行 next() 并且 token 因过期而被环回删除

最佳答案

只需针对特定用户更新 accessToken 表中创建的字段即可。

转到 server.js 文件并更新以下代码:

app.use(function (req, res, next) {
if (!req.accessToken) {
return next();
}

if (your condition)) {
req.accessToken.created =new Date();
req.accessToken.save(next);
}
});

关于node.js - Loopback 3中刷新AccessToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57914341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com