这是我的app.js
function requireLogin(req, res, next) {
if (req.isAuthenticated()) {
next();
} else {
res.redirect("/");
}
}
/**
* Routes
*/
var index = require('./routes/index');
var dashboard = require('./routes/dashboard');
app.use('/', index);
app.use('/dashboard', requireLogin, dashboard);
路由/ dashboard.js
var express = require('express');
var router = express.Router();
router.route('/')
.get(function (req, res, next) {
res.render('dashboard/index', {});
});
module.exports = router;
登录后,我被引导至路线/dashboard
,但我获得了状态404。
如果我尝试删除函数requireLogin
,则路由/dashboard
可见且正常工作。
为什么呢? 我做了一些测试,我发现问题是next()。 对于登录,我使用passport运行良好。
答案 0 :(得分:0)
实际上我有一个非常类似的问题,对我而言,它与处理身份验证的中间件无关,这是我的路由设置方式。
我想你正试图在你想要在dashboard.js
中POST凭据的路由上收到GET请求:
router.route('/')
.get(function (req, res, next) {
res.render('dashboard/index', {});
});
应该是:
router.route('/')
.post(function (req, res, next) {
res.render('dashboard/index', {});
});
因为您要将凭据发布到该路由。
答案 1 :(得分:0)
如果您仍然不知道,可以放return next()
而不是next()
。
所以这个:
function requireLogin(req, res, next) {
if (req.isAuthenticated()) {
next();
} else {
res.redirect("/");
}
}
应该变成这样:
function requireLogin(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
res.redirect("/");
}
}
希望我能帮上忙!