首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bcryptjs将散列密码保存到db时出错

使用bcryptjs将散列密码保存到db时出错
EN

Stack Overflow用户
提问于 2018-04-24 22:40:35
回答 1查看 817关注 0票数 0

我使用node.js和bcryptjs注册一个新用户,并将他们的名字/电子邮件/密码保存到mlab中的mongoDB中。

这是我的密码

代码语言:javascript
复制
const express = require("express");
const router = express.Router();
const gravatar = require("gravatar");
const bcrypt = require("bcryptjs");

// Load User model
const User = require("../../models/User");

// @route   GET api/users/test
// @desc    Tests users route
// @access  Public
router.get("/test", (req, res) => res.json({ msg: "Users Works" }));

// @route   GET api/users/register
// @desc    Register user
// @access  Public
router.post("/register", (req, res) => {
  User.findOne({ email: req.body.email }).then(user => {
    if (user) {
      return res.status(400).json({ email: "Email already exists" });
    } else {
      const avatar = gravatar.url(req.body.email, {
        s: "200", // Size
        r: "pg", // Rating
        d: "mm" // Default
      });

      const newUser = new User({
        name: req.body.name,
        email: req.body.email,
        avatar,
        password: req.body.password
      });

      bcrypt.genSalt(10, (err, salt) => {
        bcrypt.hash(newUser.password, salt, (err, hash) => {
          if (err) throw err;
          newUser.password = hash;
          newUser
            .save()
            .then(user => res.json(user))
            .catch(err => console.log(err));
        });
      });
    }
  });
});

// @route   GET api/users/login
// @desc    Login User / Returning JWT Token
// @access  Public

module.exports = router;

如果我注释掉第37行“如果(错误)抛出错误”,我可以存储用户凭据,但密码不会存储(使用邮递员)

我收到的错误是..。

错误:非法参数:未定义,字符串位于(C:\Users\Cody\Desktop\DevSoc\node_modules\bcryptjs\dist\bcrypt.js:214:46) at (C:\Users\Cody\Desktop\DevSoc\node_modules\bcryptjs\dist\bcrypt.js:220:13) at bcrypt.genSalt (C:\Users\Cody\Desktop\DevSoc\routes\api\users.js:36:16) at Immediate._onImmediate (C:\Users\Cody\Desktop\DevSoc\节点)( _modules\bcryptjs\dist\bcrypt.js:153:21)在runCallback (timers.js:789:20) at tryOnImmediate (timers.js:751:5)在processImmediate immediateCallback

这是从哪里来的?我在代码中看不到错误。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 23:16:04

您似乎要将undefined密码传递给bcrypt.hash

为了确保没有达到这一点,可能在POST路由的第一行添加更早的验证:

代码语言:javascript
复制
router.post("/register", (req, res) => {
  const {email, password} = req.body
  if (!email || !password) {
    return res.send('Must include email and password')
  }
  ...
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50011674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档