要求Passport.js / Node.js目录(除了一个页面)的身份validation?
我是使用Passport.js的新手,但是我发现目前为止还不错。 我使用护照本地护照。
但是,我想要求整个目录不包括一个页面的身份validation。 所以在我的节点服务器中,我正在像这样使用这个direcory(使用express):
app.use("/admin", express.static(__dirname + "/admin"));
然后我想让用户打到/admin/login.html,所以我想要做这样的事情:
app.get('/gb-admin/login.html', function(req, res){ });
然后,我想要求其余的authentication,所以这样的事情:
app.get('/gb-admin/*', ensureAuthenticated, function(req, res){});
这是我的ensureAuthenticated函数,以供参考,如果有帮助:
function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/gb-admin/login.html') }
我怎么去做这个? 我一直在发送无限循环的东西,导致浏览器超时。 谁能帮忙?
你得到超时的原因是因为你不能有一个空的路由处理程序; 有一次,你必须返回一个响应,或者把请求通过下一个路由处理器/中间件。
这就是说,试试这个:
function ensureAuthenticated(req, res, next) { if (req.path === '/gb-admin/login.html' || req.isAuthenticated()) { return next(); } res.redirect('/gb-admin/login.html') } app.get('/gb-admin/*', ensureAuthenticated, function(req, res, next) { next(); }); // the static middleware needs to be declared after the route above, otherwise // it will take precedence and ensureAuthenticated will never be called. app.use("/gb-admin", express.static(__dirname + "/admin"));
我不认为有一种方法可以使用单独的login页面path(除非实际上实现了读取login.html
并将其从没有该路由处理程序的地方发回),因此请在ensureAuthenticated
中间件中进行检查。
我不知道这是你的callback。 尝试:
app.get('/gb-admin/*', function (req, res, next) { ensureAuthentication(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/gb-admin/login.html') }); });
- 用户和来宾两个不同的模板? 或者dynamic改变视图使用客户端variables?
- 检查用户是否使用PassportJS / ExpressJSlogin
- Android Facebooklogin和服务器端身份validation
- 客户端的JavaScript代码replace
- 使用JSON Web令牌和node.js / express保护URL的正确方法
- Node.js Passport在页面加载上获得Facebook会话
- REST | 智威汤逊| 身份validation:如何validation安全资源的权限
- Node.jsauthentication没有护照:是json的networking令牌可靠吗?
- 在node.js中授权