2016-09-27 129 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

相关问题