我正在尝试制作一个登录功能,该功能可以接收用户发送的电子邮件和密码。
检查密码是否与数据库中的加密密码匹配 - 有效
如果 1+2 为真 -> 生成一个令牌并将令牌设置到用户文档中。但它不起作用,操作 user.token = token 无效,邮递员没有响应。
我究竟做错了什么?
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const User = require('../models/user');
exports.login = async (req, res, next) => {
const email = req.body.email;
const password = req.body.password;
let emailExist = await User.findOne({ email: email }).then(user => {
if (!user) {
return res.json({ isAuth: false, message: 'Login failed, email not found' });
}
return user;
});
let isPasswordMatch = await bcrypt.compare(password, emailExist.password);
if (!isPasswordMatch) {
return res.json({ isAuth: false, message: 'Login failed, wrong password' });
}
let loadedUser = await User.findOne({ email: email, password: emailExist.password })
.then(user => {
if (!user) {
return res.json({ isAuth: false, message: 'Login failed' });
}
return user;
})
.then(user => {
const token = jwt.sign({ role: user.role, email: user.email, userId: user._id.toString() }, 'secret');
console.log(user);
user.token = token;
return user.save();
});
res.status(200)
.cookie(('auth', token))
.json({ isAuth: true, token: token, user: loadedUser });
};
更新版本:(仍然不起作用)现在它给了我以下错误:
(节点:11336)UnhandledPromiseRejectionWarning:CastError:投射到失败值“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjowLCJlbWFpbCI6ImFoQGdtYWlsLmNvbSIsInVzZXJJZCI6IjVjMTc4NDc3Mzg5MWI5MjY5MGNkMzgwNiIsImlhdCI6MTU0NTA1MTY5OX0.8GWuV82A7yOvKKkXeOjIeYve5aH0YwBEK_RuH0NVfYA”号在路径“令牌”
exports.login = async (req, res, next) => {
const email = req.body.email;
const password = req.body.password;
let emailExist = await User.findOne({ email: email });
if (!emailExist) {
return res.json({ isAuth: false, message: 'Login failed, email not found' });
}
let isPasswordMatch = await bcrypt.compare(password, emailExist.password);
if (!isPasswordMatch) {
return res.json({ isAuth: false, message: 'Login failed, wrong password' });
}
let loadedUser = await User.findOne({ email: email, password: emailExist.password });
let token = jwt.sign(
{
role: loadedUser.role,
email: loadedUser.email,
userId: loadedUser._id.toString()
},
'secret'
);
console.log('token === ', token);
console.log('user before token === ', loadedUser);
updateUserToken = await loadedUser.update({ $set: { token: token } });
console.log('user === ', loadedUser);
res.status(200)
.cookie(('auth', token))
.json({ isAuth: true, token: token, user: updateUserToken });
};
检查您的用户模型文件,看看您是否已将令牌添加为数字。如果是这样,这可能是问题所在。尝试将其更改为字符串
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句