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应用程序中页面请求的服务器身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs + nodejs + 护照跨域请求

刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误

关于AngularJS中$http跨域 与 nodejs接收跨域请求(使用express-session,body-parser)的设置

在 jquery.load 页面中使用 angularjs

如何使用 PostgreSQL 将数据从 AngularJS 前端传递到 Nodejs 后端?