nodeJS,angularJS应用程序中页面请求的服务器身份验证
Posted
技术标签:
【中文标题】nodeJS,angularJS应用程序中页面请求的服务器身份验证【英文标题】:Server authentication on page request in nodeJS, angularJS Application 【发布时间】:2016-03-03 21:56:02 【问题描述】:我正在使用 passport.js 进行身份验证。我的要求是,如果没有登录,任何人都不应该能够访问特定页面(例如,'/restricted')。
现在,在我的应用程序中,任何人都可以直接访问“localhost:3000/#/restricted”网址。
我可以通过使用Rorschach120 的解决方案来阻止这种情况并只允许登录用户访问该页面 Redirect on all routes to login if not authenticated.
但这是在客户端完成的,并不那么安全,因为任何人都可以从浏览器访问此代码。
所以我需要将页面的请求发送到服务器,我在How to know if user is logged in with passport.js? 中尝试了moka 的解决方案:
在 app.js 中:
app.get('/restricted', loggedIn, function(req, res, next)
// req.user - will exist
// load user orders and render them
);
loggedIn() 函数检查用户是否登录。
但是这个中间件是从不调用的,任何人仍然可以访问“受限”页面。 我该怎么做才能调用它?
我是 AngularJS 和 NodeJS 的新手。我在这里做错了吗? 任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您可以为此目的使用中间件。
app.get('/secure-route', secureMiddleware, myMethod)
let secureMiddleware = function(req, res, next)
authCheck(...)
.then(function(result)
// pass
next()
)
.catch(function(err)
res.status(401).json(
code: 401,
message: 'restricted route'
)
)
【讨论】:
是的,我试过这个,如问题所述。但是这个中间件永远不会被调用。它直接被重定向到请求的页面。我可能做错了什么? 我已经编辑了我的问题,提到我正在使用类似于这个答案中描述的中间件,但它没有被调用。我应该怎么做才能调用它来检查用户是否经过身份验证? 你设置快递应用使用中间件了吗? 我已经写了 app.use("path to the file contains middleware"),我还需要做什么吗? 应该是 app.use(require("path here")).以上是关于nodeJS,angularJS应用程序中页面请求的服务器身份验证的主要内容,如果未能解决你的问题,请参考以下文章
刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决
向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误
关于AngularJS中$http跨域 与 nodejs接收跨域请求(使用express-session,body-parser)的设置