我正在尝试在 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"
你能给我一些建议吗?
最佳答案
看起来您还没有设置 Passport 来使用您的 passport-local 策略。 您需要导入它,实例化它,然后指示 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使用该身份验证策略。
关于javascript - 错误 : Unknown authentication strategy "local" (Express & Passport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727340/