首页 > 解决方案 > 如何使用 Firebase Node.js SDK 创建长期存在的令牌

问题描述

我正在尝试实施授权代码流以将 google 上的操作与我的 firebase 用户链接:

https://developers.google.com/actions/identity/oauth2-code-flow

到目前为止,我对流程的理解如下:

1 - 用户访问应用程序并被重定向到授权 url 端点

2 - 用户登录,谷歌收到授权令牌

3 - Google 将此授权令牌发送到令牌 url 端点并获取访问令牌、刷新令牌和过期时间

4 - 当访问令牌即将过期时,Google 会发送刷新令牌以获取新的访问令牌,并获取新的访问令牌和新的过期时间

我做对了吗?

作为授权令牌和访问令牌,我使用来自 Firebase 的自定义令牌。我的问题是,如何实现刷新令牌?我无法从 Firebase Node.js SDK 服务器端获取此令牌。

如何使用 Firebase Node.js SDK 增加长期存在的令牌?

还有另一种方法吗?

标签: firebaseoauth-2.0firebase-authenticationactions-on-googlefirebase-admin

解决方案


是的,您的 OAuth2 流程是正确的。

Firebase Admin SDK 允许您使用生成的自定义令牌将用户登录到您的 Firebase 服务。虽然自定义令牌会在 1 小时内过期,但一旦用户登录,他们应该无限期地进行身份验证(即直到用户退出)。因此,SDK 确实不需要生成刷新令牌。

我会建议一种不同的方法。使用 Google 的SignIn帮助意图上的操作来获取用户的信息,例如电子邮件、姓名等。使用此信息,您将能够按如下方式将用户登录到 Firebase(引用自“创建自定义令牌”Firebase 文档):

var uid = "some-uid";

admin.auth().createCustomToken(uid)
   // token == custom token
  .then(function(token) {
    firebase.auth().signInWithCustomToken(token).catch(function(error) 
    {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // ...
    });
  })
  .catch(function(error) {
    console.log("Error creating custom token:", error);
  });

参考:


推荐阅读