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

时间:2020-06-12 05:24:13

标签: node.js authentication cookies jwt express-jwt

这是我的登录控制器(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 个答案:

答案 0 :(得分: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。