gpt4 book ai didi

flutter - Flutter 的 google_sign_in 包是否包含检索用户名字和姓氏的方法?

转载 作者:行者123 更新时间:2023-12-04 12:36:18 25 4
gpt4 key购买 nike

我正在整合 谷歌登录 使用 google_sign_in 进入我的 Flutter 应用程序package,我注意到一旦用户登录,您就可以看到显示名称,但看不到名字和姓氏:

final GoogleSignInAccount googleSignInAccount =
await googleSignIn.signIn();

final name = googleSignInAccount.displayName; // exists
final firstName = googleSignInAccount.givenName; // does not exist
final lastName = googleSignInAccount.familyName; // does not exist

我还注意到 的 Android 和 iOS 库谷歌登录 包括 givenNamefamilyName字段,但由于某种原因,它被排除在 flutter 库之外。

我错过了什么吗?有没有办法使用额外的 api 调用来检索这些字段?

注意:请不要通过 googleSignInAccount.displayName.split(" "); 回复说只是将显示名称分成几部分.这不是解决方案,因为显示名称并不总是用户的全名,或者显示名称可能超过 2 个单词。

最佳答案

我发现可以从以下身份验证步骤中检索到的 id token 中提取这些值:

final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;
final idToken = googleSignInAuthentication.idToken;

创建一个将 JWT token 解析为 Map 的方法:
static Map<String, dynamic> parseJwt(String token) {
// validate token
if (token == null) return null;
final List<String> parts = token.split('.');
if (parts.length != 3) {
return null;
}
// retrieve token payload
final String payload = parts[1];
final String normalized = base64Url.normalize(payload);
final String resp = utf8.decode(base64Url.decode(normalized));
// convert to Map
final payloadMap = json.decode(resp);
if (payloadMap is! Map<String, dynamic>) {
return null;
}
return payloadMap;
}

从这里开始, given_namefamily_name很容易检索:
Map<String, dynamic> idMap = parseJwt(idToken);

final String firstName = idMap["given_name"];
final String lastName = idMap["family_name"];

关于flutter - Flutter 的 google_sign_in 包是否包含检索用户名字和姓氏的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com