1
奇怪的行为,在这里。当我用正确的用户名/密码组合打/login
时,它确实将我发送到/秘密路线。当我使用错误的组合时,它会将我的右侧正确地重定向到我开始的位置。passport.authenticate不按预期工作
但是,如果我试图“锁定”的路线,说:
app.get('/mySecretRoute', passport.authenticate('local'), function(req, res, next){
res.json({test:"secret"});
});
然后我得到一个401: Unauthorized
,如果我尝试登录后打它看来,一个cookie确实设置。但可能不是正确的。我已经验证用户是在本地策略中返回的,并且该序列化确实抓住了正确的用户。 如何正确配置护照以使用本地策略并锁定路线?我已经看过整个文档,看来我按照说明操作。
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
mongoose.connect(config.mongo.host + ':' + config.mongo.port + '/' + config.mongo.db_name);
app.get('/', routes.index);
app.get('/secret', function(req, res, next){
res.render("secret");
});
app.get('/login', function(req, res, next){
res.render("login");
});
app.post('/login',
passport.authenticate('local', { successRedirect: '/secret',
failureRedirect: '/'
})
);
app.get('/register', function(req, res, next){
res.render('register');
});
app.post('/register', register);
passport.use(new LocalStrategy(
function(username, password, done) {
User.findByUsername(username, function(err, user) {
console.log(username);
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
console.log(user._id);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
function register(req, res, next) {
console.log(req.body.username);
console.log(req.body.password);
User.addUser(req.body.username, req.body.password, function(err){
if(err) throw new err;
});
}
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
有趣的是,缺乏isAuthenticated的文档。除非我错过了某些东西,但只有在启用会话后才能正常工作。所以我可以确定它对你有用,但是它总是会返回false,因为我在护照初始化过程中完成了{sessions:false}。 – Rob