[英]How to get an access token in JWT format in Flutter's google_sign_in?
[英]Obtain a new token by refresh token with google_sign_in Flutter
我正在編寫一個從 Flutter 調用 google fit rest api 的應用程序。
我需要使用 ( https://pub.dev/packages/google_sign_in ) 與谷歌簽名。 我可以毫無問題地獲得令牌(請參閱是否有人設法從谷歌登錄(Flutter)獲取 ID 令牌)但是如何在過期時獲取新令牌?
我不想要求用戶每小時登錄並獲取一個新令牌
您可以通過 2 種方式做到這一點。
您可以使用API 。
我不知道這是否是標准的,但您可以在每次用戶打開應用程序時進行靜默silent login
,靜默日志無需用戶交互即可登錄用戶帳戶,這樣您就有了一個新令牌。 像這樣:
Future<String> refreshToken() async {
print("Token Refresh");
final GoogleSignInAccount googleSignInAccount =
await googleSignIn.signInSilently();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult = await auth.signInWithCredential(credential);
return googleSignInAuthentication.accessToken; // New refreshed token
}
手動獲取刷新令牌
apiKey - 來自 firebase 的 api 密鑰,idToken - 未過期的 ID 令牌,提供商 - 'google.com'、'apple.com' 等
final url = Uri.parse('https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=$apiKey');
final response = await http.post(
url,
headers: {'Content-type': 'application/json'},
body: jsonEncode({
'postBody': 'id_token=$token&providerId=$provider',
'requestUri': 'http://localhost',
'returnIdpCredential': true,
'returnSecureToken': true
})
);
if (response.statusCode != 200) {
throw 'Refresh token request failed: ${response.statusCode}';
}
final data = Map<String, dynamic>.of(jsonDecode(response.body));
if (data.containsKey('refreshToken')) {
// here is your refresh token, store it in a secure way
} else {
throw 'No refresh token in response';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.