使用 google_sign_in Flutter 刷新令牌获取新令牌

Posted

技术标签:

【中文标题】使用 google_sign_in Flutter 刷新令牌获取新令牌【英文标题】:Obtain a new token by refresh token with google_sign_in Flutter 【发布时间】:2020-09-25 13:14:53 【问题描述】:

我正在编写一个从 Flutter 调用 google fit rest api 的应用程序。

我需要使用 (https://pub.dev/packages/google_sign_in) 与谷歌签名。 我可以毫无问题地获取令牌(参见Did anyone manage to get the id token from google sign in (Flutter)),但是当令牌过期时如何获取新令牌?

我不想要求用户每小时登录并获取一个新令牌

【问题讨论】:

【参考方案1】:

您可以通过两种方式做到这一点。

    您可以使用API。

    我不知道这是否是标准的,但您可以在每次用户打开应用程序时执行silent login,静默登录无需用户交互即可登录用户帐户,这样您就有了一个新令牌.像这样:

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

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

    return googleSignInAuthentication.accessToken; // New refreshed token
  

【讨论】:

嗨,使用 api 似乎是不可能的,因为我的令牌来自 android 客户端 ID,而且我没有“秘密”密钥。第二个选项是我没有想到的,很有希望,而且似乎很有效,谢谢 哦,是的,当然,我刚刚尝试过,似乎有效,谢谢 ;) 如果您能提及一篇解释如何通过 API 更新它的文章,那就太好了。对我来说,第二种方法是给予相同的令牌!也许我需要等待一个小时才能测试它。 你太棒了!我一直在研究这个问题很长时间,您的解决方案非常简单且易于实施。谢谢! @HudsonKim 乐于助人

以上是关于使用 google_sign_in Flutter 刷新令牌获取新令牌的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase Auth / Google_sign_in 无法使用 statuscode=CANCELED 登录

MissingPluginException(在通道 plugins.flutter.io/google_sign_in 上找不到方法 init 的实现)

Flutter google_sign_in“选择账号”不列出Youtube品牌账号?

如何在 Flutter 的 google_sign_in 中获取 JWT 格式的访问令牌?

Flutter web google_sign_in:如何检索refreshToken

Flutter google_sign_in 错误:无法合并 dex