【发布时间】:2020-12-26 16:23:18
【问题描述】:
我了解如何使用 JWT 令牌进行身份验证/授权。但是,没有特定的方法调用或事件调用代码以使用刷新令牌在路径“/token”处提供新令牌。请回答,当令牌过期时,NPM 包 'jsonwebtoken' 会在后台自动调用下面的代码,还是有我在教程中缺少的手动调用方法?
let refreshTokens = []; //in production use redis or other...
app.post('/token', (req, res) => {
const refreshToken = req.body.token;
if (refreshToken == null) return res.sendStatus(401);
if (refreshTokens.includes(refreshToken)) return res.sendStatus(403);
jwt.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
const accessToken = generateAccessToken({ name: user.name });
res.json({ accessToken: accessToken });
})
})
【问题讨论】:
-
“自动在幕后”是什么意思不是很清楚。
jwt.verify在被调用后立即“发生”一次。这能回答你的问题吗? -
谢谢,我知道 .verify() 是一个关键字。我的问题是,这个 POST 方法什么时候运行以及它是如何调用的?显然,用户从未点击过 URL
/token. -
考虑到很多假设,只要有传入的
POST /token请求,此代码就会运行 - 不一定由用户手动触发(例如,有一个fetch()函数) -
if (refreshTokens.includes(refreshToken)) return res.sendStatus(403);- 所以传入的refreshToken存在就报错? -
我相信这行意味着如果数组中存在刷新令牌,则不要重复运行块的其余部分。也许这就是答案——这个 POST 方法是否表现得像一个 IIFE 并被 403 限制? @Dima Parzhitsky 的问题是我在任何地方都找不到
fetch(),显然用户不使用那条路线。
标签: javascript node.js express authentication jwt