Я пытаюсь заставить пользователя зарегистрироваться на моем веб-сайте и сохранить учетные данные на 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.info(err);
return done(err);
} else {
console.info("Success");
return done(null);
}
});
}
));
Маршрут может получить введенный пользователем пароль и пользователя. Когда я нажимаю «Отправить», буквально ничего не происходит; ни сервер, ни клиент ничего не консольют. После небольшой отладки я думаю, что проблема связана с тем, что Passport.Authenticate не вызывается, но я не уверен, почему. При необходимости я могу опубликовать другие фрагменты кода, спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это ОП. Я смог найти решение. 1) В моем файле auth.js
Passport.authenticate('local-signup', err => {
замените local-signup на local так становится:
Passport.authenticate('local', err => {
2) У меня было несколько стратегий Passport, и каждая из них находится в своем собственном файле (одна для входа в систему и одна для регистрации). Чтобы использовать правильный «локальный», я должен импортировать правильный в мой файл auth.js. Достаточно просто, это
const passport = require('../Passport/local-signup');
Для входа в систему это будет другой файл.