我无法让 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,
);
}