当前位置: 首页 > 知识库问答 >
问题:

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

薛博艺
2023-03-14

我正在使用google_sign_in包将Google Sign In集成到我的flutter应用程序中,我注意到一旦用户登录,您就可以看到显示名称,但不能看到名字和姓氏:

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

我还注意到,用于Google登录的Android和iOS库确实包括GivenNameFamilyName字段,但出于某种原因,它被排除在flutter库之外。

我是不是漏掉了什么?是否有一种方法可以使用额外的api调用来检索这些字段?

注意:请不要响应,只需通过GoogleSigninAccount.displayName.split(“”);将显示名称拆分为几个部分。这不是一个解决方案,因为显示名称并不总是用户的全名,或者显示名称可能超过2个单词。

共有1个答案

束志业
2023-03-14

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

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

创建一个将JWT令牌解析为映射的方法:

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"];
 类似资料:
  • 当我用R在web上抓取研究文章时,我遇到了HTML代码,其中a

  • 我在我的Java应用程序中使用Jackson JSON库及其Tree Model系统()。在这种情况下,我需要检查是否包含给定的。我正在浏览JavaDocs,并且没有看到的任何类型的方法。我最终自己写了一个包含方法: 单元测试: 我是否错过了杰克逊的一些东西,我正在复制一些我错过的图书馆方法。否则,还有比我做的更好的方法吗?

  • 问题内容: 我有一个的条目: 目前,我正在检查它是否包含真像这样: 这是检查布尔数组的 最快 方法吗?如果不是,执行此检查的最快方法是什么? 编辑: 通过在Android 4.03 Samsung S2设备上将其作为应用程序运行,我对您的答案中的方法进行了计时,如下所示: 在五次跑步中的时间排名最高,排名第一: 在5334和11584 ns之间: } return false; 在160542和1

  • 问题内容: 我看到人们正在使用另一个列表来查看列表中是否存在某项,但是有一种快速的方法吗?: 问题答案: 您可以使用以下语法: 同样,逆运算符: 它适用于列表,元组,集合和字典(检查键)。 请注意 ,这是列表和元组中的O(n)操作,而集合和字典中是O(1)操作。

  • 问题内容: 具有java.sql.ResultSet的实例,如何检查它是否包含名为“ theColumn”的列? 问题答案: 您可以使用ResultSetMetaData遍历ResultSet列,并查看列名是否与指定的列名匹配。 例:

  • 问题内容: 使用普通的JavaScript(不是jQuery),是否可以检查元素是否 包含 类? 目前,我正在这样做: 问题是,如果我将HTML更改为此… …不再存在完全匹配的内容,因此我得到的默认输出为none()。但我还是想输出为,因为还 包含 了类。 问题答案: 使用方法: 这适用于所有当前浏览器,并且也有polyfill支持旧版本的浏览器。 或者 ,如果您使用较旧的浏览器,并且不想使用po