颤动 使用Google登录后获取刷新令牌的解决方案。 目前,没有返回refreshToken,因此无法获取refreshToken并生成新的accessToken。 仅当用户注销或再次使用 Google 登录时才会生成新的访问令牌,这对用户来说不方便。
期待刷新令牌
要从 google_sign_in 包获取刷新令牌,您应该在调用 GoogleSignIn 时首先提及它
final GoogleSignIn _googleSignIn = GoogleSignIn(
forceCodeForRefreshToken: true,
scopes: [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
],
);
登录后
GoogleSignInAccount? account = await _googleSignIn.signIn();
GoogleSignInAuthentication auth = await account.authentication;
然后获取服务器验证码
String? serverAuthCode = account.serverAuthCode;
获取 serverauthcode 后,使用代码调用此函数
Future<Map<String, dynamic>?> _exchangeCodeForTokens(String code) async {
final response = await http.post(
Uri.parse('https://oauth2.googleapis.com/token'),
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: {
'code': code,
'client_id':
'435920207467-d8300e7g81sqqdvjss4rgn4g4r8u4t7r.apps.googleusercontent.com',
'client_secret': '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',
'redirect_uri': '',
'grant_type': 'authorization_code',
},
);
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
log("Error: ${response.body}");
return null;
}
}
希望这个答案对您有所帮助,您知道如何使用 google_sign_in 从 flutter web 获取 id_token 吗?我一直在寻找那个。