Flutter Google 登录 idToken 已过期

use*_*455 5 dart google-signin flutter

我在我的 flutter 应用程序中使用 google_sign_in 进行身份验证。

我按照此处记录的步骤开始:

https://github.com/flutter/plugins/blob/master/packages/google_sign_in/google_sign_in/example/lib/main.dart

我按照建议获取 idToken 在服务器端执行身份验证。

这是我用来获取 idToken 的代码片段

_googleSignIn.onCurrentUserChanged.listen(
            (GoogleSignInAccount account) {
      setState(() {
        developer.log("************Changing account");
        _currentUser = account;
        account.authentication.then((key){
          developer.log("########### Changing token");
          _userToken=key.idToken;
        });

      });
    });
Run Code Online (Sandbox Code Playgroud)

当我发送 idToken(上面示例中的 _userToken)时,它在一段时间内工作正常,后来我在服务器端看到以下错误消息:

令牌已过期,1593370077 < 1593384191

看起来token是有过期时间的,过一段时间就会过期。

我尝试将上面的代码片段从 initState() 移至 build()。这是我的假设,如果我每次构建小部件时都调用它,我应该获得一个新令牌。那不起作用

我认为它可能起作用的原因是因为当我“运行.dart”(不是热重载)时它起作用。这让我认为将其移动到构建可能会起作用。没用

我的问题:刷新令牌或使用 google_sign_in 在 flutter 中获取新令牌的编程方式是什么。

感谢您的帮助!!

Jid*_*uru 3

idToken 每 30 分钟过期一次。要刷新令牌,您可以使用API或执行静默登录,如下所示:

Future<String> refreshToken() async {
    final GoogleSignInAccount googleSignInAccount =
        await googleSignIn.signInSilently();
    final GoogleSignInAuthentication googleSignInAuthentication =
        await googleSignInAccount.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleSignInAuthentication.accessToken,
      idToken: googleSignInAuthentication.idToken,
    );
    await auth.signInWithCredential(credential);

    return googleSignInAuthentication.accessToken; //new token
  }
Run Code Online (Sandbox Code Playgroud)