Firebase 身份验证和 Websockets

问题描述 投票:0回答:1

我正在开发一个使用 Firebase 进行身份验证的 Flutter 应用程序。我正在使用

firebase_auth
包来实现这一点。它运行良好。我的大部分 Flutter 应用程序将基于 Websockets,我正在使用
web_socket_channel
包。

由于Websockets不支持发送自定义标头等,因此在建立Websockets连接时我无法发送当前登录用户的idToken。所以我必须在服务器端创建一个会话来存储 idToken。由于

firebase_auth
都是客户端,我必须使用 Firebase Admin SDK 登录用户。如果这样做,我将失去在 idToken 过期时刷新它的功能。我仍然可以刷新 idToken,但这违背了使用
firebase_auth
包的全部目的,该包提供了开箱即用的所有这些功能。

如何实现两全其美,我仍然可以使用

firebase_auth
包来实现所有身份验证目的,并且即使刷新,仍然可以在服务器端使用正确的 idToken 为用户维护会话。

如果我的做法完全错误,请为我指明正确的方向。我不是在寻找代码。当我陷入困境时,我正在寻找大方向。

firebase websocket firebase-authentication
1个回答
0
投票

建立 Websockets 连接时无法发送当前登录用户的 idToken。

事实上,你可以。只需将其作为该 websocket 上数据有效负载的一部分发送,就像发送到服务器的其他任何内容一样。 Websocket 支持两侧实体之间的双向通信,并且它们可以自由地通过该套接字实现自己的消息传递协议。

由于 firebase_auth 都是客户端,因此我必须使用 Firebase Admin SDK 登录用户。

那是不可能的。 Firebase 管理员不会登录用户。 Firebase Admin 是“无状态”的,仅使用现有存储的数据进行操作。只有前端可以登录用户。登录后,前端应将 ID 令牌发送到后端(正如我刚才提到的),以便后端使用 Firebase Admin 验证令牌并代表用户进行操作。

如果我这样做,我将失去在 idToken 过期时刷新 idToken 的功能。

这是在前端管理登录的一大原因。您应该指示您的前端监听 ID 令牌更改,并将每个新令牌发送到后端进行验证。

如何实现两全其美......并且即使刷新,仍然在服务器端使用正确的 idToken 为用户维护会话。

如上所述,使用 websocket 使前端能够将令牌更新发送到后端。

© www.soinside.com 2019 - 2024. All rights reserved.