节点护照错误:未知身份验证策略“本地登录”
Posted
技术标签:
【中文标题】节点护照错误:未知身份验证策略“本地登录”【英文标题】:nodes passport Error: Unknown authentication strategy "local-login" 【发布时间】:2016-03-11 17:47:07 【问题描述】:我一直在尝试使用 nodejs 上的护照进行本地身份验证工作,据我所知,我的所有代码都是正确的,但我一直收到关于“未知身份验证策略所以也许其他人可以帮助我”的同样烦人的错误遇到这个问题,我的代码如下所示。
这是我在 nodejs 中配置护照的代码。
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');
module.exports = function(passport)
passport.serializeUser(function(user, done)
done(null, user.id);
);
passport.deserializeUser(function(id, done)
User.findById(id, function(err, user)
done(err, user);
);
);
passport.use('local-signup', new LocalStrategy(
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
,
function(req, username, password, done)
process.nextTick(function()
User.findOne( 'local.username' : username, function(err, user)
if (err)
return done(err);
if(user)
return done(null, false, req.flash('signupMessage', 'That Username is already taken.'));
else
var newUser = new User();
newUser.local.username = username;
newUser.local.password = newUser.generateHash(password);
newUser.save(function(err)
if(err)
throw err;
return done(null, newUser);
);
);
);
));
passport.use('local-login', new LocalStrategy(
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
,
function(req, username, password,done)
User.findOne( 'local.username' : username, function(err, user)
if(err)
return done(err);
if(!user)
return done(null, false, req.flash('loginMessage', 'No user found.'));
if(!user.validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
return done(null, user);
);
));
;
这是服务器端的帖子。
app.post('/signin', passport.authenticate('local-login',
successRedirect : '/profile',
failureRedirect : '/login',
failureFlash : true
));
这是 html 文档中的表单
<div id="signin">
<form class="form-horizontal" method="POST" action="/signin">
<div class="form-group">
<label class="control-label col-sm-2">Username:</label>
<div class="col-xs-3">
<input type="text" class="form-control"></input><br>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Password:</label>
<div class="col-xs-3">
<input type="password" class="form-control"></input><br><br>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default btn-lg">Sign In</button><br><br>
</div>
</div>
</form>
<div id="accountlinks">
<a href="/signup">Create Account</a><br>
<a href="">Forgot Password</a>
</div>
</div>
谁能帮助我告诉我我做错了什么。谢谢
【问题讨论】:
【参考方案1】:我也遇到了同样的问题,但是当我将这行代码放在app.use(flash())
之后时,它起作用了:
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
require('./config/passport')(passport);
【讨论】:
【参考方案2】:require('./config/passport')(passport);
更改文件的路径。如果没有这个工作,护照的配置将不会传递给路由。
这里是线的位置的sn-p:
// server.js
// configuration
===============================================================
mongoose.connect(configDB.url); // connect to our database
require('./config/passport')(passport); // pass passport for configuration
【讨论】:
以上是关于节点护照错误:未知身份验证策略“本地登录”的主要内容,如果未能解决你的问题,请参考以下文章
无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined