2016-09-27 55 views
1

我試圖在快速應用內使用Passport身份驗證。錯誤:未知的身份驗證策略「本地」(Express&Passport)

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

看起來你還沒有設置Passport來使用你的護照本地策略呢。 您需要導入它,實例化它,然後指示Passport使用它。這裏有一個例子:

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

相關問題