ошибка сохранения хешированного пароля в БД с помощью bcryptjs - PullRequest
0 голосов
/ 25 апреля 2018

Я использую node.js и bcryptjs, чтобы зарегистрировать нового пользователя и сохранить его имя / адрес электронной почты / пароль в mongoDB в mlab.

Вот мой код

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 "if (err) throw err;"Я могу сохранить учетные данные пользователя, но пароль не будет храниться (с использованием почтальона)

Я получаю сообщение об ошибке ..

Ошибка: недопустимые аргументы: не определено, строка в _async (C: \ Users \ Cody \ Desktop \ DevSoc \ node_modules \ bcryptjs \ dist \ bcrypt.js: 214: 46) в Object.bcrypt.hash (C: \ Users \ Cody \ Desktop \ DevSoc \ node_modules \ bcryptjs \ dist \ bcrypt.js: 220: 13) в bcrypt.genSalt (C: \ Users \ Cody \ Desktop \ DevSoc \ rout \ api \ users.js: 36: 16) в Immediate._onImmediate (C: \ Users \ Cody \ Desktop \ DevSoc \node_modules \ bcryptjs \ dist \ bcrypt.js: 153: 21) в runCallback (timers.js: 789: 20) в tryOnImmediate (timers.js: 751: 5) в processImmediate [как _immediateCallback] (timers.js: 722: 5)

Откуда это?Я не вижу ошибки в своем коде.

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Похоже, что вы передаете undefined пароль bcrypt.hash.

Чтобы убедиться, что он не доходит до этой точки, добавьте более раннюю проверку, возможно, в первой строке маршрута POST:

router.post("/register", (req, res) => {
  const {email, password} = req.body
  if (!email || !password) {
    return res.send('Must include email and password')
  }
  ...
})
...