【问题标题】:sequelize findOne doesn't find a userId when that usedIf is in the db当 usedIf 在数据库中时,sequelize findOne 找不到 userId
【发布时间】:2020-09-17 23:42:13
【问题描述】:

我正在使用 node.js/express/sequelize 登录用户。我正在测试在邮递员中发出请求,看看它是否得到任何东西。我正在测试一个我知道在数据库中的用户和密码,但是即使测试的名称在数据库中,我在 sequelize 中的 findOne 查询也会返回 null。这是有问题的查询:

    let {  userId, pw } = req.body
  try{
    const foundUser = await User.findOne({ where: { userId: userId } });
    if (foundUser === null) {
        return res.status(401).send({ auth: false, token: null,error: 'name not found' });
    } else {
        const passwordIsValid = bcrypt.compareSync(pw, foundUser.pw);
        if (!passwordIsValid) return res.status(401).send({ auth: false, token: null,error: 'name not found' });
        const token = jwt.sign({ id: foundUser.id}, config.secret, {
            expiresIn: 86400 // expires in 24 hours
          });
        res.status(200).json({auth:true,token:token});
    }

  } catch (err) {
    res.status(500).json(err);
  }

}

my json

我在索引 js 上为 jsonenter 图像描述实现了 body-parser,并且路由工作作为 userId 和 pwd 值使其进入 findOne 查询。但是它仍然说查询后没有结果。终端运行以下内容(userId 为 'slim')

执行(默认):SELECT id, username, userId, pw, createdAt, updatedAt FROM users AS users WHERE userId =.'@986苗条的';

'slim' 位于 Json 和 db 的 'userId' 部分中

【问题讨论】:

  • 首先使用 findAll,它返回数组
  • 如果不是问题,只需检查 req.body 是否返回正确的值
  • 我不好,我使用的是 findOne,但在发布此问题之前尝试将其更改为 findall。 FindAll 返回 500 错误。我会相应地编辑

标签: mysql node.js express sequelize.js postman


【解决方案1】:

事实证明,问题是因为在我的数据库的 userId 部分中有多个“slim”,这很有趣。当我为 userId 输入一个真正唯一的值时,它按预期返回了令牌。也许这看起来很明显,但重要的是该值要求以唯一身份进行身份验证。

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2019-12-24
    • 1970-01-01
    • 2013-11-22
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多