node.js - 如何将 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.'});
}
}
解决方案
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'];
推荐阅读
- rdf - 我已经开发了一个本体——我该如何进行?
- django - 如何查询多个条件中的2个
- sql-server - 在创建表语句中动态打开/关闭标识
- javascript - RichEditor 使用 execCommand('bold') 两次附加额外标签
- ios - iOS/Swift 如何实时更新表格视图
- angular - 如何连接参数以链接到 mat-tab-nav-bar
- python - ValueError:未能找到可以处理输入的数据适配器:
, - php - ACF 默认值中的简码仅在保存帖子后才有效
- oracle - 甲骨文形式。子表单看不到主表单发布的更改
- c# - Npgsql 和 System.Threading.Tasks.Extensions 之间 System.Runtime.CompilerServices.Unsafe 的冲突