Локальное время паспорта при создании пользователя (Node, Express, Postgres, Knex) - PullRequest
0 голосов
/ 01 марта 2019

У меня есть Node / Express API, обслуживающий данные для внешнего интерфейса Vue, и теперь я добавляю Passport для аутентификации и авторизации.У меня есть функция createUser, которая успешно добавляет пользователя, но при этом функция зависает.Я уверен, что это просто глупость, которую я пропустил, например, не звонить next() (хотя я это сделал), и я был бы признателен, если бы кто-то с более ясной головой смотрел.

// authRoutes.js

const router = require('express').Router();
const { createUser } = require('../controllers/authController');

router.route('/auth/register').post(createUser);

module.exports = router;

// authController.js

'use strict';

const authHelpers = require('../auth/_helpers');
const passport = require('../auth/local');

const handleResponse = (res, code, statusMsg) => {
    res.status(code).json({ status: statusMsg });
};

const createUser = (req, res, next) => {
    // passes correct user and pass
    console.log(req.body);
    return authHelpers
        .createUser(req, res, next)
        .then(() => {
            passport.authenticate('local', (err, user, info) => {
                if (err) {
                    handleResponse(res, 500, 'error');
                    console.log(info);
                }
                if (user) {
                    handleResponse(res, 200, 'success');
                    console.log(info);
                }
            })(req, res, next);
        })
        .catch(next);
};

module.exports = {
    createUser,
};

// auth / _helpers.js

const bcrypt = require('bcryptjs');
const knex = require('../db/connection');

const comparePass = (userPassword, databasePassword) =>
    bcrypt.compareSync(userPassword, databasePassword);

const createUser = req => {
    const salt = bcrypt.genSaltSync();
    const hash = bcrypt.hashSync(req.body.password, salt);
    return knex('users')
        .insert({
            email: req.body.email,
            password: hash,
        })
        .returning('*');
};

module.exports = {
    comparePass,
    createUser,
};

РЕДАКТ. 1:

Согласно предложению @ cantuket, регистрация того, что createUser возвращает, дает пользовательский объект, который правильно вставляется в БД:

// console.log ('res:', result)

{ id: 30,
    email: 'boooya@dubay.com',
    password:
     '$2a$10$WNX.9ur7PlS9ZZvZlJk9Tu9j3lWMjaTlUQ1v7i84dqgHscDupIowW',
    admin: false,
    created_at: 2019-03-01T18:22:53.120Z,
    updated_at: 2019-03-01T18:22:53.120Z,
    last_login: null } 
    ```

EDIT 2:
Thanks to [@cantuket][1] for reminding me to get dirty with console logs, I figured it out by switching 'user' with the returned value (here response), and returning nexts. See below for the fix that worked:

const createUser = (req, res, next) => {вернуть authHelpers .createUser (req, res) .then (response => {passport.authenticate ('local', (err, user, info) => {if (err) {console.error (err); console.info (info); handleResponse (res, 500, 'error'); возврат следующего (err);} if (! response) {console.error (err); console.info (info); handleResponse (res, 500, 'no user'); return next (err);} if (response) {handleResponse (res, 200, 'success'); next ();}}) (req,res, next);}) .catch (err => {console.error (err); console.infо (информация);handleResponse (res, 500, 'error');вернуться далее (ошибаться);});};



  [1]: https://meta.stackexchange.com/users/461693/cantuket

1 Ответ

0 голосов
/ 01 марта 2019

Не ответ:

Первое, что я хотел бы сделать, это проверить, что createUser() -> knex().insert() возвращает ...

 .then(result => {
     console.log('createUser:', result)
        passport.authenticate('local', (err, user, info) => {
            if (err) {
                handleResponse(res, 500, 'error');
                console.log(info);
            }
            if (user) {
                handleResponse(res, 200, 'success');
                console.log(info);
            }
        })(req, res, next);
    })
    .catch(err=> {
       console.log('err createUser:', err)
       next();
    });
...