无法使用 mongoose、node.js、express 和 async 函数更新文档数据

卡琳娜

我正在尝试制作一个登录功能,该功能可以接收用户发送的电子邮件和密码。

  1. 检查电子邮件是否存在 - 有效
  2. 检查密码是否与数据库中的加密密码匹配 - 有效

  3. 如果 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Mongoose和Node.js更新MongoDB中的数据

TypeError:image.save不是函数,但是使用mongoose和express创建新文档时

无法看到使用Node.js和Mongoose在JSON文档上添加的字段

无法使用Node js(express)和MongoDB(mongoose)对用户配置文件进行审阅

使用 Node JS 和 Mongoose 访问插入文档的结果

用于下载使用Express.js和node.js实现的文档的按钮无法正常工作

如何使用Node JS中的async和await函数提取数据?

Node.js和Mongoose数据获取

无法使用Node.js和Express捕获POST参数

无法使用Node.js,Express和EJS显示图像

Node.js / Mongoose无法比较文档

使用猫鼬和Express / Node Js提取数据

使用Node.js / Express和Mongoose将图像存储在MongoDB中

使用Node.js,Express,Mongoose和React将图像上传到MongoDB

Node.js / Express和mongoose:通过自动拉入新数据建立“可观察”的mongodb Connection?

Express 和 Mongoose 无法更新对象

如何使用 mongoose 和 node js 创建文档而不在 mongodb 中插入不需要的字段数据?

如何使用 node.js 和 mongoose 计算一组文档中的词频

使用mongoose / mongodb / express保存表单数据的node.js出现错误,无法正常工作吗?

无法使用 Mongoose 和 Node.js 使用通配符搜索获取记录

如何使用Node.js和Mongoose从MongoDB集合中删除数据

未使用Mongoose和Node.js创建数据库

使用 node js 和 mongo 在 cpanel 上获取数据超时(驱动程序:Mongoose)

使用 Node.js 和 Mongoose 从数据库中列出用户

嵌套的MongoDB文档问题(Mongoose和Node Js)

Node.js,Express和Mongoose提供多个静态文件

在Node.js中将Async与Waterfall和Recursion结合使用

使用async.forEach和异步操作的Node.js

Node.js:使用sinon和async / await进行测试