Почему не работает мой пользовательский обратный вызов в Passport JS? - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь дать пользователю возможность зарегистрироваться на моем веб-сайте и сохранить учетные данные на mongodb.

Это мой файл auth.js, в котором определен маршрут:

router.post('/signup', (req,res,next) => {
    Passport.authenticate('local-signup', err => {
    if (err) {
        if (err.name === "MongoError" && err.code === 11000) {
            res.status(409).json({
                success: false,
                message: "Unsuccessful",
                errors: {
                    email: "This email is already taken."
                }
            });
        }
        res.status(400).json({
            success: false,
            message: "Unsuccessful",
            errors: {
                unknown: "Could not process for some reason. Contact admin."
            }
        });
    }        
    res.status(200).json({
        success: true,
        message: "Successful",
        errors: {}
    });
}) (res, req, next);
}

Эта последняя скобка немного испортилась, но поверьте, это не синтаксическая ошибка.В этом фрагменте я определил стратегию паспорта:

require ('../Models/Users')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/onlinestore');
const User = mongoose.model('User');
const PassportLocalStrategy = require('passport-local').Strategy;
const Passport = require('passport');

module.exports = Passport.use(new PassportLocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        session: false,
        passReqToCallback: true,
    }, (email, password, done) => {              
        let user = new User();
        user.email = email.trim();
        user.password = password.trim();
        user.save(err => {
            if (err) {
                console.log(err);
                return done(err);
            } else {
                console.log("Success");
                return done(null);
            }
        });
    }
));

Маршрут может получить введенный пользователем пароль и пользователя.Когда я нажимаю «отправить», буквально ничего не происходит;сервер ничего не утешает и не делает клиент.После небольшой отладки я думаю, что проблема связана с тем, что Passport.Authenticate не вызывается, но я не уверен, почему.При необходимости я могу опубликовать другие фрагменты кода, спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Это ОП.Я смог найти решение.1) В моем файле auth.js

Passport.authenticate('local-signup', err => {

замените 'local-signup' на 'local', чтобы он стал:

Passport.authenticate('local', err => {

2) У меня было несколько паспортовстратегии и каждая в отдельном файле (одна для входа в систему и одна для регистрации).Чтобы использовать правильный «локальный», я должен импортировать правильный в мой файл auth.js.Достаточно просто, это

const passport = require('../Passport/local-signup');

Для входа в систему это будет другой файл.

...