我最近开始研究NodeJS框架,因为我想从Java/JSP转过来。现在,为了对用户进行身份验证,我在运行在Google App Engine环境中的JSP页面中使用了非常简单的代码。
UserService userService = UserServiceFactory.getUserService();
if (request.getUserPrincipal() == null) {
// redirect user to login page if he's not logged in
// notice that through Google App Engine settings I enabled only a specific domain to login against my application
response.sendRedirect(userService.createLoginURL("/"));
}
else {
// render page if he's logged in
}
我想知道我是否可以在NodeJS中实现类似的东西,这意味着如果用户没有登录,我根本不希望页面被呈现。
发布于 2016-01-25 08:35:20
如果您正在使用标准的Node.js工具,您可能会熟悉Passport module。
Passport提供了一种标准化且相对简单的方式来编写各种身份验证方法的代码。
这有一个Google authentication plugin。
这可能是你最简单的路线。
更新
Passport很容易集成到Express web服务中。它可以设置为保护进入您设置的服务的部分或全部“路由”(最终用户将其视为URL路径)。
在受保护的路由上,如果用户未经过身份验证或未被授权访问该路由,他们将看到您定义的错误页面,或者将看到代码401或403的默认浏览器错误显示。或者,您可以将它们重定向到另一条路径--例如登录页面。
您不需要使用EJS。EJS是Express web服务的模板选项之一。有很多选择,包括Jade和Mustache。如果你不需要的话,你不需要使用任何模板语言。
发布于 2016-01-25 20:49:32
从你的问题和评论可以看出,这是一个由多个部分组成的问题。因此,让我在Julian的回答中添加另一个部分。
正如Julian在另一个答案中所写的那样,Passport将为您提供Google身份验证、管理令牌、服务器/客户端、回调urls等所有功能。假设您通过Google进行身份验证,然后提供您自己的本地令牌,以便在API中使用。
但是假设你已经找到了一个很好的auth策略。另外,假设您有一些客户端资产和文件是“公共的”(例如,登录页面)和一些您想要保护的内容(例如,仪表板页面和附带的JS),当然还有一些提供实际数据的API端点(例如。/api/users
)。
在Expess.js应用程序中,您将遍历一组中间件,直到其中一个结束链。考虑下面的例子:
let app = require('express')();
// Serve that "public" part, login page
app.use('/login.html', express.static());
// Now, protect the rest with your local token
app.use(passport.authenticate('local'));
// serve the "dashboard"
app.use('/dashboard.html', express.static());
// then the rest
app.use('/api/users', userHandler);
因此,您的中间件是自上而下的。第一个匹配的东西将结束链,或者在passport.authenticate()
的情况下,添加一些东西到请求/响应(例如,req.user
)。
因此,您可以使用Google auth、本地身份验证、公共和经过身份验证的静态页面以及“纯”API端点,在这些端点中,您没有客户端资产,只有数据/内容。
https://stackoverflow.com/questions/34988101
复制相似问题