是否有人设法从Google登录中获取ID令牌(Flutter)

时间:2018-09-22 17:08:17

标签: dart flutter google-signin

我正在尝试将我的用户连接到我的后端服务器,我使用了来自google官方登录插件的示例来进行扑打: https://pub.dartlang.org/packages/google_sign_in

签名过程进行得很好,我得到了用户名和电子邮件等。 但是我需要id令牌才能通过我的服务器对用户进行身份验证。

Ps:不使用firebase,仅使用google登录。

任何人都可以指导我如何获取id令牌吗?

5 个答案:

答案 0 :(得分:11)

您可以尝试使用此

 _googleSignIn.signIn().then((result){
          result.authentication.then((googleKey){
              print(googleKey.accessToken);
              print(googleKey.idToken);
              print(_googleSignIn.currentUser.displayName);
          }).catchError((err){
            print('inner error');
          });
      }).catchError((err){
          print('error occured');
      });

答案 1 :(得分:2)

或尝试这样,如果id令牌为null,则对我有用。

docs指出,您需要后端的oauth2客户端ID才能请求idToken或serverAuthCode。

从Firebase Google sigin中以

身份验证复制Web SDK配置 在以下代码中粘贴粘贴到res / values / strings.xml,应该可以

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="default_web_client_id">{Web app Client id goes here}</string>
</resources>

答案 2 :(得分:2)

您可以像这样更简单地获取访问令牌和 ID 令牌:

final result = await _googleSignIn.signIn();
final ggAuth = await result.authentication;
print(ggAuth.idToken);
print(ggAuth.accessToken);

或者您也可以将其添加到 try-catch 中以处理错误。

try {
   final result = await _googleSignIn.signIn();
   final ggAuth = await result.authentication;
   print(ggAuth.idToken);
   print(ggAuth.accessToken);
} catch (error) {
  print(error);
}

答案 3 :(得分:1)

要检索 Is idToken 对我有用:

1.google-services.json 文件必须放在 /android/app/

2.你需要添加到你的/android/app/build.gradle

apply plugin: 'com.google.gms.google-services'

3. 和 /android/build.gradle

classpath 'com.google.gms:google-services:4.3.4'

就是这样。 GoogleSignIn 将返回一个真实的 idToken 而不是 null。

字体:https://github.com/flutter/flutter/issues/12140#issuecomment-348720774

答案 4 :(得分:0)

我在这个问题上挣扎了大约一个月。结果我得到了相同的访问令牌,即使用户尝试重新启动应用程序也是如此。这很痛苦,因为我的应用程序处理范围,如果用户在第一次登录时错过检查一个或多个范围,该应用程序根本无法工作,即使他/她再次登录并授予权限。< /p>

对我有用的解决方法:我调用了 googleSignIn.currentUser.clearAuthCache() 方法,然后调用了 googleSignIn.signInSilently()。这将返回一个可用于进一步身份验证的 GoogleSignInAccount。我的猜测是 clearAuthCache() 方法会清除令牌缓存,因此会创建一个新令牌。这应该会为您提供一个新的访问令牌,并让您的应用进行有效调用。

我真诚地请求 Google 开发者解决这个问题。目前,这种解决方法是唯一有效的方法。干杯!

附言如果这对您有用,请点赞,因为它也可能帮助其他遇到相同问题的人。