[英]Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
[英]Invalid token from google_sign_in plugin when verifying on server side
請我嘗試使用插件google_sign_in 插件在我的 flutter 應用程序上實現社交身份驗證。 它在客戶端正常工作並檢索用戶的帳戶詳細信息。
我的問題是我想將用戶保存在我的數據庫中,所以我需要驗證在服務器端獲得的id_token
。 我試圖在如圖所示的服務器端的谷歌API庫這樣在這里,但我越來越關鍵的無效令牌的結果。 我最終決定嘗試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);
}
}
請任何幫助將不勝感激。
事實證明,這些令牌一直都是有效的。 令牌在命令行上被截斷並變得無效。
我現在測試有效性的方式是使用HTTP包進行測試,無需復制token。
例如。
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
在文檔 google_sign_in 中,他們有 IOS 的詳細信息,但在 Android 中,他們缺少這些步驟:
類路徑 '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 正常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.