Passport successRedirect не работает !! 1 - PullRequest
0 голосов
/ 09 июня 2018

Я все перепробовал.Я просмотрел все ответы, когда-либо отвечавшие на вопросы с малейшим сходством.Я в отчаянии.

Я использую модуль паспорта для своего веб-сайта, и successRedirect не работает, в то время как faultRedirect делает именно то, что должен.это users.js , он выполняет маршрутизацию.

    'use strict';

     const passport = require('passport');
     const User = require('../models/user');

     module.exports = function(_, passport){
      return {
    SetRouting: function(router){
      console.log('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.log('got index page');
        return res.render('index');
    },

    getSignUp: function(req, res){
        console.log('got signup page');
        return res.render('signup');

    },

    homePage: function(req, res){
        console.log('got home page');
        return res.render('home');
    },

    postSignUp: passport.authenticate('local.signup', {
        successRedirect: '/home',
        failureRedirect: '/signup',
        failureFlash: true
    }),
}

, а это passport-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);
    });
});
}));

Я бы так сильно ценил вашу помощь!

1 Ответ

0 голосов
/ 10 августа 2018

Ваша стратегия называется 'local.signup'.Имена стратегий не могут содержать точку.

Существует несколько мест, где Passport использует имя стратегии в качестве ключа объекта и идентификатора переменной.Например, Authenticator Passport создает, а затем ссылается на Объект стратегий с именами стратегий в качестве ключей:

Authenticator.prototype.use = function(name, strategy) {
  ...  
  this._strategies[name] = strategy;
  return this;
};

Чтобы это работало, name должен быть допустимым Javascriptидентификатор, означающий отсутствие периодов.

...