Неправильный адрес электронной почты или пароль - PullRequest
1 голос
/ 02 августа 2020

не знаю, что происходит не так, когда я пытаюсь отправить запрос через почтальона, я получаю сообщение об ошибке типа «Неверный адрес электронной почты или пароль». войдите в систему. Пожалуйста, помогите

регистрация

ниже мой запрос на регистрацию, в котором я выполняю свою проверку регистрации.

const User = require('../model/user');
const bcrypt = require('bcryptjs');

exports.signup = (req, res) => {
  const { name, email, password } = req.body;
  if (!name || !email || !password) {
    res.status(422).json({
      error: "please add all field"
    })
  }
  User.findOne({ email: email })
    .then((SavedUser) => {
      if (SavedUser) {
        return res.status(400).json({
          error: "User already exists that email"
        })
      }
      const user = new User({
        email,
        password,
        name
      })
      user.save()
        .then(user => {
          res.json({
            message: "saved Successfully"
          })
            .catch(err => {
              console.log(err);
            })
        })
        .catch(err => {
          console.log(err);
        })
    })
}

Вход

ниже моя форма входа, в которой я выполняю операцию входа

exports.signin = (req, res) => {
  const { email, password } = req.body;
  if (!email || !password) {
    res.status(422).json({
      error: "please enter email and password"
    })
  }
  User.findOne({ email: email })
    .then(SavedUser => {
      if (!SavedUser) {
        return res.status(400).json({
          error: "invalid email or password"
        })
      }
      bcrypt.compare(password, SavedUser.password)
        .then(doMatch => {
          if (doMatch) {
            res.json({
              message: "Successfully Signed in"
            })
          }
          else {
            return res.status(422).json({
              error: "Invalid email or password"
            }) 
          }
        })
        .catch(err => {
          console.log(err);
        })
    })
}

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

вы не зашифровали свой пароль во время сохранения.

Вы можете сделать функцию предварительного сохранения в своей схеме следующим образом.

// Hash the plain text password before saving
User.pre("save", async function (next) {
  const user = this;
  try {
    if (user.isModified("password")) {
      user.password = await bcrypt.hash(user.password, 8);
    }
    next();
  } catch (error) {
    next(error);
  }
});
0 голосов
/ 02 августа 2020

Кажется, у вас нет пароля при создании нового mon goose user -объекта. Obvioulsy, bcrypt.compare(password, SavedUser.password) тогда не удастся. Попробуйте сделать это так (обратите внимание, я использую async / await здесь вместо обещаний напрямую):

password = await bcrypt.hash(password, 10);
const user = new User({
        email,
        password,
        name
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...