2016-09-27 6 views
1

Я пытаюсь использовать аутентификацию паспорта в экспресс-приложении.Ошибка: Неизвестная стратегия аутентификации «локальная» (экспресс и паспорт)

router.get('/signup', (req ,res) => { 
    res.render('signup'); 
}); 

router.post('/signup', function(req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    User.findOne({ username: username }, function(err, user) { 

    if(err) { return next(err); } 
    if(user) { 
     req.flash('error', 'User already exists'); 
     return res.redirect('/signup'); 
    } 

    var newUser = new User({ 
     username: username, 
     password: password 
    }); 
    newUser.save(next); 
    }); 
}, passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/signup', 
    failureFlash: true 
})); 

Каждый раз, когда я пытаюсь зарегистрироваться тестовых пользователей, он работает, но он показывает мне ошибку вроде этого:

Error: Unknown authentication strategy "local" 

Можете ли вы посоветовать мне что-нибудь.

+0

Вы используете паспорт-местный? –

+0

Теперь только с использованием паспортного модуля – George

+0

Вы можете проверить исходный код всего проекта: https://github.com/kiknag/Social-App – George

ответ

0

Попробуйте использовать функцию обратного вызова после локального, вместо передачи объекта. Что-то вроде этого:

router.post("/register", function(req, res){ 
     var newUser = new User({username: req.body.username}); 
     User.register(newUser, req.body.password, function(err, user){ 
      if(err){ 
       req.flash("error", err.message); //such as the username is taken or no username entered etc. 
       res.redirect("/register"); 
      } else { 
      passport.authenticate("local")(req, res, function(){ 
       res.redirect("/"); 
       }); 
      } 
     }); 
    }); 
+0

, к сожалению, он не работает. – George

3

Похоже, вы еще не установили паспорт, чтобы использовать свою паспортную локальную стратегию. Вам нужно будет импортировать его, создать экземпляр, а затем проинструктировать Паспорт, чтобы использовать его. Вот пример:

var LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { return done(null, false); } 
     return done(null, user); 
    }); 
    } 
)); 

router.post('/signup', function(req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    User.findOne({ username: username }, function(err, user) { 

    if(err) { return next(err); } 
    if(user) { 
     req.flash('error', 'User already exists'); 
     return res.redirect('/signup'); 
    } 

    var newUser = new User({ 
     username: username, 
     password: password 
    }); 
    newUser.save(next); 

    passport.authenticate('local', { failureRedirect: '/signup' }), 
    function(req, res) { 
     res.redirect('/'); 
    }); 
    }); 
}); 

Пожалуйста, прочитайте документацию here для этого плагина. Также, here's an example app используя эту стратегию авторизации.

+0

Спасибо, я попробую сейчас. – George

Смежные вопросы