Google 刷新令牌

问题描述 投票:0回答:1

颤动 使用Google登录后获取刷新令牌的解决方案。 目前,没有返回refreshToken,因此无法获取refreshToken并生成新的accessToken。 仅当用户注销或再次使用 Google 登录时才会生成新的访问令牌,这对用户来说不方便。

期待刷新令牌

flutter google-signin refresh-token
1个回答
0
投票

要从 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 吗?我一直在寻找那个。

© www.soinside.com 2019 - 2024. All rights reserved.