Я пытаюсь сделать функцию входа в систему, которая получает и электронную почту и пароль от пользователя.
- проверяет, существует ли электронная почта - работает
проверяет, соответствует ли пароль зашифрованному паролю в БД - работает
, если 1+2 - true -> генерирует токен и устанавливает токен в пользовательский документ.Но это не работает, действие 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" на пути "знак" * * * тысяча двадцать-одна 1022 * * * 1023