如何将 JWT 令牌发送到 Cookie 并在其他路由中使用?

Posted

技术标签:

【中文标题】如何将 JWT 令牌发送到 Cookie 并在其他路由中使用?【英文标题】:How to send JWT token to Cookie and use in another routes? 【发布时间】:2020-10-01 21:37:54 【问题描述】:

这是我的登录控制器 (JWT)

const token = jwt.sign( _id: user._id , secret);
res.header('auth-token', token).redirect('/home');

这是我的 JWT 令牌中间件

module.exports = (req, res, next)=>
    const token = req.header('auth-token');
    if(!token)
        return res.send('Denied');
    
    try 
        const verified = jwt.verify(token, secret);
        req.user = verified;
        next();
     catch (error) 
        console.log('JWT Error', error)
    

这是我的路线代码

const verify = require('../middlewares/tokenMiddleware');
router.get('/home', verify, (req, res, next)=>
  res.render('home');
);

令牌正在分配并且可以在登录路由上可见。但我想将它发送到 cookie,以便我可以在所有路由上使用它来进行用户身份验证。

【问题讨论】:

【参考方案1】:

您必须安装 cookie 解析器包才能从请求中设置和读取 cookie。 参考:Express (Cookie Parser) 安装包后,您可以简单地在节点应用程序中使用它。 设置 cookie:-

const cookieParser = require('cookie-parser');

app.use(cookieParser());
res.cookie('auth-token', token, [options]);    // You can look up the options at the API reference

读取 cookie:-

const token = req.cookies['auth-token'];

作为替代方案,要在不使用 cookie 解析器包的情况下设置 cookie,您必须使用 'Set-Cookie : 标头才能使用 HTTP 标头设置 cookie。

【讨论】:

以上是关于如何将 JWT 令牌发送到 Cookie 并在其他路由中使用?的主要内容,如果未能解决你的问题,请参考以下文章

cookie 中的 JWT 令牌如何更新?

如果用于认证的JWT令牌保存在HTTP-Only cookie中,你如何从cookie中读取它,以便我可以在请求头中包含它?

为啥不将 JWT 访问令牌存储在内存中并在 cookie 中刷新令牌?

检查 cookie 中 JWT 令牌的有效性时如何避免不必要的 API 调用

如何使用.Net Core cookie中间件ticketdataformat将Jwt令牌从Api保存到c#中的cookie

将 JWT 令牌存储在共享首选项中?并在整个应用程序中检索价值?