请尝试使用插件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);
}
}
请提供任何帮助。
答案 0 :(得分:0)
在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”中的依赖项中
google-services.json
并将其复制到目录“ app /”
完成所有这些步骤后,您可以运行并正常使用idToken
答案 1 :(得分:0)
事实证明令牌始终有效。令牌在命令行上被截断并变得无效。
我现在测试有效性的方法是使用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