首页 > 解决方案 > 如何将 JWT Token 存储到 Cookie 中并用于身份验证

问题描述

所以我正在制作一个简单的游戏商店应用程序,它具有登录/注册功能、一个包含“购买”游戏的索引页面、一个供用户查看他们购买的游戏的页面以及一个帮助用户购买好游戏的图表. 我设法使我的登录和注册功能正常工作,它还为用户创建了一个令牌,我希望在用户登录时将该令牌存储到 cookie 中,然后在重定向到索引页面时验证存储在 cookie 上的令牌到允许用户进入,这就是问题所在,令牌存储在 cookie 上,但它说我的 req.cookies.token 未定义,所以它一直给我一条错误消息而不是重定向到索引页面,我不确定是什么我做错了

这是我的授权服务

const cookieParser = require("cookie-parser");
var jwt = require('jsonwebtoken');
require("dotenv-safe").config();

exports.authorize = function(req, res, next){
    const token = req.body.token || req.query.token || req.cookies.token || req.headers['x-access-token'];
    console.log(req.cookies.token);
    if (!token){
        res.status(401).json({auth: false, message: 'You need to Login to access this page.'});
    } else {
        jwt.verify(token, process.env.SECRET, function (error, decode){
            if (error){
                res.status(401).json({auth: false, message: 'Invalid Token.'});
            } else {
                next();
            }
        });
    }
}

这是我的登录功能

var jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');
require("dotenv-safe").config();

exports.login = async(mail, pass) => {    
    const user = await Usuario.findOne({ email: mail });
    const id = user._id;
    if (user.email === mail && user.ValidPassword(pass)){
        const token = jwt.sign({id}, process.env.SECRET, {expiresIn: 18000}); //5 min
        return res.cookie('x-access-token', token, { secure: false, httpOnly: true});
        return token;
    } else{
        throw({status: 404, code: 'User not Found.', message: 'Try another E-mail.'});
    }
}

标签: node.jscookiesjwt

解决方案


i solved it now, i guess i was sending the token to cookies in the wrong place, i changed the following in my auth.service:

exports.authorize = function(req, res, next){
const token = req.body.token || req.query.token || req.cookies['x-access-token'] || req.headers['x-access-token'];

推荐阅读