Ошибка аутентификации при попытке войти в систему, но регистрация кажется нормальной - PullRequest
0 голосов
/ 07 февраля 2020

Я следую курсам NodeJS, Angular и MongoDB (я не могу спросить учителя), в которых я занимаюсь разработкой веб-страницы / API Musi c и застрял в знаке вверх - частично войдите, первый работает отлично, потому что когда я пробую это с Почтальоном, все данные отображаются прямо в базе данных, но когда я хочу войти в систему с теми же данными, я получаю каждый раз ответ 402, хотя данные это то же самое, что я использовал при регистрации. Пароль сохраняется как Ha sh с использованием bcrypt, после чего он должен быть расшифрован с помощью bcrypt.compare. Скажите, что может быть не так в этом, я не очень много практикуюсь с этими технологиями, но я не могу найти ответы.

Глобальный код:

'use strict'

let bcrypt = require('bcrypt-nodejs')
let user = require('../models/user')

Код регистрации:

function saveUser(req, res) {
  let usr = new user();
  //se recolectan los datos del cuerpo de la petición
  let param = req.body;

  console.log(param);
  usr.name = param.name;
  usr.surname = param.surname;
  usr.email = param.email;
  usr.role = "ROLE_USER";
  usr.image = "null";

  //saves in db
  if (param.password) {
    bcrypt.hash(usr.password, null, null, function(err, hash) {
      usr.password = hash;
      if (usr.name != null && usr.surname != null && usr.email != null) {
        usr.save((err, userStored) => {
          if (err) {
            res.status(500).send({ message: "Error al guardar el usuario." });
          } else {
            if (!userStored) {
              res.status(404).send({ message: "Ha ocurrido un error" });
            } else {
              res.status(200).send({ user: userStored });
            }
          }
        });
      } else {
        res.status(200).send({ message: "Introduce los datos que faltan." });
      }
    });
  } else {
    res.status(200).send({ message: "Introduce la contraseña" });
  }
}

Код входа:

function loginUser(req, res) {
  let param = req.body;

  user.findOne({ email: param.email }, (err, datos) => {
    console.log(user);
    if (err) {
      res.status(500).send({ message: "Error en la petición." });
    } else {
      if (!datos) {
        res.status(404).send({ message: "El usuario no existe" });
      } else {
        bcrypt.compare(param.password, user.password, function(err, check) {
          if (check) {
            if (param.gethash) {
              //devolver un token de jwt
            } else {
              res.status(200).send({ hola: datos });
            }
          } else {
            res.status(402).send({ message: "Credenciales no correctas." }); //Este es el mensaje que me devuelve todo el tiempo
          }
        });
      }
    }
  });
}
...