我试图/enquete
在/login
. 我正在使用passport-local来实现它。我已经检查了登录函数返回一个用户(req.isAuthorized()
是真的),它实际上是试图去/enquete
但是当试图以/enquete
某种方式访问时req.isAuthorized()
是假的。所以我无法访问它:(。
我想知道我在这里错过了什么?这是正确的方法吗?
这些是我的代码的一部分:
passport.use(new LocalStrategy(function (username, password, done) {
process.nextTick(function() {
model.findByUsername(username, function(err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
if (user.password != password) { return done(null, false, { message: 'Invalid password' }); }
return done(null, user); // <<-- I pass this so login was OK
});
});
}));
...
var app = express();
app.set('view engine', 'ejs');
app.use(less(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(session({ secret: '123', resave: true, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(flash({ locals: 'flash' }));
...
app.post(
'/login',
passport.authenticate(
'local',
{ successRedirect: '/enquete', // <--- Please read below note on this
failureRedirect: '/login' }));
function ensureLocalAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
app.get(
'/enquete',
ensureLocalAuthenticated,
function(req, res) {
res.render('pages/enquete');
});
注意:
我已经调试passport.authenticate
以确保登录确实成功。由于我提供successRedirect
选项然后return res.redirect(options.successRedirect);
发生在附近node_modules/passport/lib/middleware/authenticate.js:245
。我已经检查req.isAuthorized()
过在重定向之前确实是真的。
然而 inensureLocalAuthenticated
req.isAuthorized
是假的。为什么?!
我搞不清楚了。任何帮助表示赞赏