Не удается обновить данные документа с помощью функций mongoose, node.js, express и async - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь сделать функцию входа в систему, которая получает и электронную почту и пароль от пользователя.

  1. проверяет, существует ли электронная почта - работает
  2. проверяет, соответствует ли пароль зашифрованному паролю в БД - работает

  3. , если 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

1 Ответ

0 голосов
/ 17 декабря 2018

проверьте ваш файл модели пользователя и посмотрите, добавили ли вы токен в виде числа.если это так, это может быть проблемой.Попробуйте изменить его на string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...