当前位置: 首页 > 知识库问答 >
问题:

通过使用google_sign_in Flutter刷新令牌获得新令牌

乌鸿宝
2023-03-14

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

我需要使用(https://pub.dev/packages/google_sign_in)与谷歌签名。我可以毫无问题地获得一个令牌(见是否有人设法从谷歌登录(Flutter)获得id令牌),但如何获得一个新的令牌时,它是过期的?

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

共有1个答案

景品
2023-03-14

你可以用两种方法做到这一点。

>

  • 您可以使用该API。

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

    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
      }
    

  •  类似资料:
    • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。

    • 我编写了一个控制台ASP.NET应用程序来获取AccessTokens。我有clientId,我的应用程序的客户端秘密,我做了以下操作: var authContext=新的AuthenticationContext(“https://login.windows.net/common/oauth2/authorize”);var acquireTask=authContext.AcquireTok

    • 下面的代码使用Google oauth2机制登录用户。我们需要在用户离线时处理用户日历的更新,所以我们最终需要“刷新令牌”。grantOfflineAccess()的结果是否返回刷新令牌(在下面,我可以看到response.code包含一个可能是刷新令牌的值)? 我如何获得一个刷新令牌,可以用来(服务器端)创建新的访问键,以便离线访问用户的谷歌日历?

    • 我想根据保存在数据库中的“刷新令牌”获得一个新的“访问令牌”。 请求{“error”:“invalid_grant”} 我在php脚本中使用相同的CLIENT_ID、CLIENT_SECRET和“refresh token”,在“访问令牌”过期时,我设法使用“refresh token”获得新的“访问令牌”。 我基于javadoc.google-oauth-java-client编写了代码。 UP

    • 目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无