具有 JWT Logout 路由的节点,我需要在注销路由的 body 上传递什么?

Node with JWT Logout route, what do I need to pass on the body of the logout route?

我正在使用这个示例:https://github.com/jkasun/stack-abuse-express-jwt 和 Postman 并且所有路由都工作正常,减去 /logout

我正在用令牌传递承载令牌,就像我对 books.js Get 和 Post /books 路由所做的那样,但我收到错误:

"ReferenceError: t is not defined"

我想我需要在 body 上传递一些东西,但我不知道是什么

路线:

app.post('/logout', (req, res) => {
    const { token } = req.body;
    refreshTokens = refreshTokens.filter(token => t !== token);

    res.send("Logout successful");
});

您将 filter 的回调元素命名为错误。应该是 t:

refreshTokens = refreshTokens.filter(t => t !== token);

此外,要为 refreshTokens 分配一个新值,它不能声明为 const。您可能需要使用 let.

这方面的问题很少。让我们来解决它。可能 post 会很长,所有错误都一一突出显示以帮助您理解它。首先你要明白accessTokens 和refreshTokens 的两个区别,让我在最后讨论。前几项更正。

在您的 github 文件行 #22 中定义以下内容

const refreshTokens = [];

但它应该是 var 或 let 而不是 const,因为您将在其中添加更多值。常数用于不改变。另一件事你忘记了 accessTokens 在这里添加。所以现在修改如下

var refreshTokens = [];
var accessTokens = [];

在第 35 行,您正在创建访问令牌,因此也可以通过在 refereshTokens 行下方的 38 之后添加以下内容来将其添加到此数组中

accessTokens.push(accessToken)

很好,你已经保存了两个令牌,现在当你想注销时根据你的编码,你似乎想删除刷新令牌,正如@pzaenger 建议的那样。

refreshTokens = refreshTokens.filter((t) => t !== token)

这将删除您的 refreshToken,但您的 accessToken 仍然有效,功能不多,所以不确定。您还需要在 Headers 中添加您的令牌作为授权,而不是在 Body.