我正在尝试将我的用户连接到我的后端服务器,我使用了来自google官方登录插件的示例来进行扑打: https://pub.dartlang.org/packages/google_sign_in
签名过程进行得很好,我得到了用户名和电子邮件等。 但是我需要id令牌才能通过我的服务器对用户进行身份验证。
Ps:不使用firebase,仅使用google登录。
任何人都可以指导我如何获取id令牌吗?
答案 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 开发者解决这个问题。目前,这种解决方法是唯一有效的方法。干杯!
附言如果这对您有用,请点赞,因为它也可能帮助其他遇到相同问题的人。