使用 Firebase 进行 NodeJS 身份验证

Posted

技术标签:

【中文标题】使用 Firebase 进行 NodeJS 身份验证【英文标题】:NodeJS authentication with Firebase 【发布时间】:2017-09-12 08:00:11 【问题描述】:

我想通过 NodeJS 与 Firebase 进行身份验证和保持会话。客户端无法直接与 Firebase 通信。

简而言之:

客户端(浏览器) NodeJs(firebase-admin) Firebase

我在 NodeJS 中创建了 Firebase 客户端,然后我使用了登录方法:

var firebaseClient = require('firebase');
firebaseClient.initializeApp(config)
firebaseClient.auth().signInWithEmailAndPassword(req.body.email, req.body.password).catch(function(error)
    console.log(error);
)

然后我创建了路由来检查经过身份验证的用户:

app.get('/check',function(req,res)
    var user = firebaseClient.auth().currentUser
    console.log(user)
)

这种方法只允许我保留 1 个以前登录的用户。

我想使用 firebase-admin,但我不知道如何保持会话和验证用户

【问题讨论】:

查看passport 作为管理会话的一种方式。我确定有一个包可以使用已经为您制作的 firebase 来管理 firebase 身份验证,例如 npmjs.com/package/passport-firebase-auth 我用的是角火。您可以直接与 firebase 通信您的客户端(浏览器)。我没有找到所描述问题的解决方案。 @KarolBilicki 你找到解决方案了吗? 很遗憾没有 【参考方案1】:

您可以使用客户端 SDK 在其各自的设备/浏览器上对客户端进行身份验证,并让它们将 ID 令牌发送到使用 firebase-admin(管理 SDK)编写的后端服务。管理 SDK 提供验证客户端发送的 ID 令牌的方法:https://firebase.google.com/docs/auth/admin/verify-id-tokens

【讨论】:

但这使得用户依赖于客户端sdk。我正在尝试制作完整的 REST API 服务,但没有找到仅通过云功能登录和注销的方法:( 这是意料之中的,因为 Admin SDK 旨在扩展和补充客户端 SDK 的功能。但是,现在有一个用于maintaining auth state with cookies 的 API,但您仍然需要从客户端登录获得的 ID 令牌。您最好的选择是将其与在服务器中使用客户端 SDK 结合起来。 感谢您的回复 :) 看来我找到了替代方案。我正在尝试使用 Google Identity Toolkit 的 REST 服务从 Cloud Functions 获取 IdToken。您认为这是一个可能的解决方案吗? firebase.google.com/docs/reference/rest/auth 您是使用自定义令牌还是使用用户名和密码获取它?如果是后者,我注意到你得到的 ID 令牌略有不同。 我正在使用用户名/密码登录。看起来我成功使用了 Rest Auth。但是,我坚持一个观点。它不支持注销。我是否需要忽略它并通过清除客户端上的 accessTokens 来处理?

以上是关于使用 Firebase 进行 NodeJS 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 电子邮件验证无法正常工作

无法为 VueJS + NodeJS 安装 Firebase

正确使用Firebase身份验证?

Firebase php-jwt 令牌刷新

同时使用 Firebase 数据库和 Firestore

使用 Unity 进行 Firebase 电话身份验证