我最近开始研究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中实现类似的功能,这意味着如果用户没有登录,我根本不想要呈现页面。
答案 0 :(得分:2)
如果您使用的是标准Node.js工具,您可能会熟悉Passport module。
Passport提供了一种标准化且相对简单的方法来编写各种身份验证方法。
这有一个Google authentication plugin。
这可能是你最简单的路线。
Passport可轻松集成到Express Web服务中。它可以设置为保护部分或全部路由" (最终用户将其视为URL路径)到您设置的服务中。
在受保护的路由上,如果用户未经过身份验证或未获得该路由的授权,他们将看到您定义的错误页面,或者会看到代码401或403的默认浏览器错误显示。或者您可以将其重定向到替代路线 - 例如登录页面。
您不需要使用EJS。 EJS是Express Web服务的模板选项之一。有很多选择,包括玉和胡子。如果你不想要它,你不必使用任何模板语言。
答案 1 :(得分:0)
从您的问题和评论中可以看出,这是一个多部分的问题。所以,让我再添一部分来说明朱利安所回答的问题。
Passport,正如Julian在其他答案中写的那样,是什么能让你获得Google身份验证,管理令牌,服务器/客户端,回调网址,以及这方面的一切。假设您通过Google进行身份验证,然后提供您自己的本地令牌,以便在您的API中使用。
但是,假设您找到了一个很好的身份验证策略。另外,假设您有一些客户端资产和“公共”文件(例如,登录页面)和一些您想要保护的文件(例如Dashboard页面和随附的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身份验证,本地身份验证,公开和经过身份验证的静态网页以及没有客户端资产,只有数据/内容的“纯”API端点。