NodeJS аутентификация пользователя с JWT - PullRequest
0 голосов
/ 28 февраля 2020

Я только начал с nodejs с реактивным интерфейсом. Но у меня есть некоторые проблемы при аутентификации пользователя. Я пытаюсь получить пользователя с указанным c адресом электронной почты и паролем. Мой API для этого выглядит следующим образом: я создал три файла контроллера, службы и файлы маршрутизатора для любого API-запроса.

//userServices.js
const db = require('./../../db-connection/connection')

userAuth: (params, callback) => {
    db.query(`SELECT * FROM Users WHERE email = ?`,[params.email],
      (error, result, fields) => {
        if(!error) {
          console.log('result = ' + result[0]);
          return callback(error, result[0])
        }
        else
          return callback(error)
      });
  }

И это мой файл userController js.

//userController.js
const {create, userindex, userAuth} = require('./UserServices');
const {genSaltSync, hashSync, compareSync} = require('bcrypt');
const {sign} = require('jsonwebtoken');

userLoginAuth: (req, res) => {
    const body = req.body;
    userAuth(body, (error, results) => {
      if (error)
        console.log(error);

      if (!results) {
        return res.json({
          success: 0,
          data: 'Invalid email or password'
        })
      }

      const result = compareSync(body.password, results.password);
      if(!result) {
        results.password = undefined;
        const jsontoken = sign({result: results}, 'choegyel123', {
          expiresIn: '1h'
        });
        return res.json({
          success: 1,
          message: 'Login successful',
          token: jsontoken
        })
      } else
        console.log('password' + result.password)
      return res.json({
        success: 0,
        error: 'Invalid email or password'
      });
    });
  }

Но проблема в файле userServices. js. Мой sql запрос выполнен правильно, но в обратном вызове для «результатов» я получаю странный объект. Я думаю, что я должен получить некоторый массив соответствующих данных из таблицы базы данных, и в моем журнале консоли я получаю [объектный объект]. Я не уверен, что это на самом деле означает, и я также уверен, что это блокировщик, так как я не могу восстановить пароль с этим объектом в моем userController. Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2020

Проблемы

  • compareSync возвращает логическое значение с true, указывающим правильный пароль. Вы используете if(!result), что является обратным.
  • Убедитесь, что ваш {} правильный на else
  • Вы регистрируете result.password, что undefined, потому что result - ваше возвращаемое значение compareSyn c. Вы хотели войти results.password. Избегайте использования result и results для двух разных вещей, потому что это позволяет легко совершать эти ошибки. Что-то вроде bcryptResult и resultObj может быть лучше.
  • Когда вы console.log(), передаете данные в качестве второго аргумента или создаете второй журнал, потому что при объединении объектов всегда отображается [object Object].

Обновленный фрагмент

  const result = compareSync(body.password, results.password);
  if(result) {
    results.password = undefined;
    const jsontoken = sign({result: results}, 'choegyel123', {
      expiresIn: '1h'
    });
    return res.json({
      success: 1,
      message: 'Login successful',
      token: jsontoken
    })
  } else {
    console.log('password', results.password)
    return res.json({
      success: 0,
      error: 'Invalid email or password'
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...