在NodeJS中处理服务器端Google域身份validation

我最近开始看NodeJS框架,因为我想从Java / JSP切换。 现在为了validation用户身份,我在一个运行在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中实现类似的function,这意味着如果用户没有login,我不希望页面被渲染。

Solutions Collecting From Web of "在NodeJS中处理服务器端Google域身份validation"

如果您正在使用标准的Node.js工具,那么您可能会熟悉Passport模块 。

Passport提供了一种标准化和相对简单的方法来编码各种authentication方法。

这有一个Google身份validation插件 。

这可能是你最简单的路线。

更新

Passport很容易集成到Express Web服务中。 它可以设置为保护您设置的服务中的一些或全部“路由”(最终用户将其视为URLpath)。

在受保护的路由上,如果用户没有通过身份validation,或者没有被授权,那么他们将看到您定义的错误页面,或者将显示代码为401或403的默认浏览器错误显示。您也可以将其redirect到其他路由 – 例如login页面。

你不需要使用EJS。 EJS是Express Web服务的模板选项之一。 有很多的select,包括翡翠和胡子。 如果你不需要,你不必使用任何模板语言。

从您的问题和意见中可以看出,这是一个多部分的问题。 所以让我再补充一下朱利安回答的部分。

护照,正如朱利安在其他答案中写的,是什么让你的谷歌身份validation,pipe理令牌,服务器/客户端,回叫url,在这方面的一切。 假设您通过Google进行身份validation,然后在API中提供您自己的本地令牌。

但是,假设您已经find了一个很好的validation策略。 还有,假设您有一些客户端资源和文件是“公开”的(例如,login页面)和一些您想保护的文件(例如仪表板页面和随附的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身份validation,本地身份validation,公开和经过身份validation的静态页面以及您没有客户端资源(仅数据/内容)的“纯”API端点。