1

我无法让 Firebase 身份验证流用于令牌刷新。我收听一个流,并且在令牌更改(例如令牌刷新)时,我想触发一个函数,该函数使用新的标头更新客户端链接。我需要标头在后端通过授权规则。

为此,我在我的根小部件的 initState 中设置了一个流,该流在首次构建应用程序时触发,并通过访问 AuthService 类来设置侦听器,然后触发 Api 类中更新客户端的函数。当我手动调用 currentUser.getIdToken(true) 来刷新令牌时,流会触发,但当令牌在一小时后自动刷新时不会触发。我想知道我是否以某种方式关闭了自动刷新功能,或者我的听众没有正确设置,或者我是否还缺少其他东西。

设置监听器:

@override
  void initState() {
    locator<AuthService>().auth.idTokenChanges().listen((user) {
      user!
          .getIdToken()
          .then((token) => locator<DgraphApi>().setNewToken(token));
    });

更新客户端:

late GraphQLClient client;

void setNewToken(String token) {
    HttpLink httpLink = HttpLink(
      dotenv.env['DGRAPH_ENDPOINT']!,
      defaultHeaders: {'X-Auth-Token': token, 
      'DG-Auth': dotenv.env['KEY']!
      }
      ,
    );
    client = GraphQLClient(
      cache: GraphQLCache(),
      link: httpLink,
    );
  }
4

0 回答 0