请尝试使用插件google_sign_in plugin在我的flutter应用程序上实现社会认证。它在客户端正常工作,并检索用户的帐户详细信息。
我的问题是我想将用户保存在我的数据库中,所以我需要验证服务器端的id_token
。我尝试使用服务器端的google API库执行此操作,如here所示,但我键获取无效的令牌结果。我最终决定尝试tokeninfo
端点https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=<my_token>
,它应该返回200响应,其中包含用户详细信息和其他信息,但我得到了400响应的身体{"error_description": "Invalid Value"}
。
我用jwt.io解码了令牌,以确保它不是一个过期的令牌,令牌仍然非常有效。
这是我在flutter上用来获取id_token的google_sign_in代码。
GoogleSignIn _googleSignIn = new GoogleSignIn(
scopes: <String>[
'profile',
'email',
'https://www.googleapis.com/auth/contacts.readonly',
],
);
Future<Null> _handleSignIn() async {
try {
_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');
});
print('signed in .....');
} catch (error) {
print(error);
}
}
如有任何帮助,将不胜感激。
在文档google_sign_in中,他们有IOS的详细信息,但在Android中他们错过了这些步骤:
classpath'com.google.gms:google-services:4.2.0'
在根“build.gradle”中的依赖项中
申请插件:'com.google.gms.google-services'
在你的“app / build.gradle”底部
实施“com.google.gms:google-services:4.2.0”
在“app / build.gradle”中的依赖项
谷歌,services.json
并将其复制到目录“app /”
完成所有这些步骤后,您可以运行并获得idToken正常
事实证明,令牌始终有效。令牌在命令行上被截断并变为无效。 我现在测试有效性的方法是使用HTTP包来测试而不必复制令牌。 例如。
Dio dio = new Dio();
Response response = await dio.get('https://www.googleapis.com/oauth2/v1/tokeninfo?id_token='+googleKey.idToken);
print(response.data); //contains the token info