Google Yolo不会返回access_token和性别信息

时间:2018-02-22 10:07:12

标签: google-signin google-login googlesigninapi google-identity

我正在为我的网站实施一键式signIn。 使用普通的Google SignIn,我可以这样做:

window.gapi.auth2.getAuthInstance().signIn()
   .then((googleUser) => sendAccessTokenToServer(googleUser.getAuthResponse().access_token))

感谢 access_token ,在服务器端我可以做类似这样的事情并获取性别等个人资料信息:

GoogleCredential.Builder()
        .setTransport(httpTransport).setJsonFactory(jsonFactory)
        .setClientSecrets(clientId, secret).setRequestInitializer((request -> {
          HttpHeaders headers = request.getHeaders();
          headers.setAuthorization("Bearer " + accessToken);
        })).build();

但是当使用 googleyolo 时,使用hint()或retrieve()我无法获取access_token,只能获取idToken: googleyolo

.hint({
    supportedAuthMethods: [googleUrl, 'googleyolo://id-and-password', scope],
    supportedIdTokenProviders: [
       {
         uri: googleUrl,
         clientId
       }]
     }).then(
          (credential) => {
            if (credential.idToken) {
              sendidTokenToServer(credential.idToken);
            }
          }

但问题是,当我在服务器端做的时候:

GoogleIdToken idToken = null;
    try {
      idToken = verifier.verify(accessToken);
    } catch (Exception e) {
      e.printStackTrace();
    }

    if (idToken != null) {
      GoogleIdToken.Payload payload = idToken.getPayload();

      // Print user identifier
      String userId = payload.getSubject();
      System.out.println("User ID: " + userId);

      // Get profile information from payload
      String email = payload.getEmail();
      boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
      String name = (String) payload.get("name");
      String pictureUrl = (String) payload.get("picture");
      String locale = (String) payload.get("locale");
      String familyName = (String) payload.get("family_name");
      String givenName = (String) payload.get("given_name");

我没有像性别这样的信息。 是否可以从 googleyolo 获取 access_token 或在 idToken 中获取性别?

1 个答案:

答案 0 :(得分:1)

我是Google的图书馆产品经理。目前,一键式图书馆不支持访问性别。我的建议是显示您自己的用户界面来收集性别信息(可能只是再次点击M / F /其他/跳过等),因为如果这些数据不可用或用户手动注册,您将不得不这样做。并非所有Google用户都设置了性别信息或通过API访问。