Все перепробовала. Я просмотрел все ответы, когда-либо отвечавшие на вопросы с малейшим сходством. Я в отчаянии.
Я использую модуль паспорта для своего веб-сайта, и successRedirect не работает, а failRedirect делает именно то, что должен делать. это users.js, он выполняет маршрутизацию.
'use strict';
const passport = require('passport');
const User = require('../models/user');
module.exports = function(_, passport){
return {
SetRouting: function(router){
console.info('got it');
router.get('/', this.indexPage);
router.get('/signup', this.getSignUp);
router.get('/home', this.homePage);
router.post('/signup', this.postSignUp);
},
indexPage: function(req, res){
console.info('got index page');
return res.render('index');
},
getSignUp: function(req, res){
console.info('got signup page');
return res.render('signup');
},
homePage: function(req, res){
console.info('got home page');
return res.render('home');
},
postSignUp: passport.authenticate('local.signup', {
successRedirect: '/home',
failureRedirect: '/signup',
failureFlash: true
}),
}
и это паспорт-local.js, где я вызываю свою локальную стратегическую функцию:
'use strict';
const passport = require('passport');
const User = require('../models/user');
const LocalStrategy = require('passport-local').Strategy;
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
passport.use('local.signup', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
}, (req, email, password, done) => {
User.findOne({'email': email}, (err, user) => {
if (err){
return done(err);
}
if (user){
return done(null, false, req.flash('error', 'User with email already exist'));
}
const newUser = new User();
newUser.username = req.body.username;
newUser.fullname = req.body.username;
newUser.email = req.body.email;
newUser.password = newUser.encryptPassword(req.body.password);
newUser.save((err) => {
done(null, newUser);
});
});
}));
Я так благодарен за вашу помощь!



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


Ваша стратегия называется 'local.signup'. Имена стратегий не могут содержать точку.
Есть ряд мест, где Passport использует название стратегии в качестве ключа объекта и идентификатора переменной. Например, Аутентификатор паспорта конструирует и позже ссылается на Объект стратегий с именами стратегий в качестве ключей:
Authenticator.prototype.use = function(name, strategy) {
...
this._strategies[name] = strategy;
return this;
};
Чтобы это работало, name должен быть действительным идентификатором Javascript, то есть без точек.