从 Google+ 登录功能迁移

<ph type="x-smartling-placeholder">

尽可能减少范围变更对用户的影响的步骤

  1. 如果您的应用需要经过身份验证的用户的电子邮件地址,而您之前已出于此目的使用 profile.emails.read,请改用 email
  2. 通过批准的验证请求,对 profile.emails.read 进行审批。请参阅如何提交以进行验证?
  3. 在要移除的范围内,撤消之前的用户令牌,或彻底移除对应用的访问权限。例如,应撤消具有 profile.emails.read 访问权限的令牌。我们建议您在用户位于应用时应用撤消机制,以便立即征得用户同意。
  4. 提示用户重新同意使用新范围(例如 email,而不使用 profile.emails.read)。
  5. 移除要逐步淘汰的 Google API OAuth 权限请求页面配置的范围。
。 <ph type="x-smartling-placeholder">

将网站从 Google+ 登录功能迁移到 Google 时必须做出的更改 登录方式取决于您使用的 Google+ 登录流程。通常,迁移 您需要更新登录按钮、请求的范围和说明 了解如何从 Google 检索个人资料信息。

更新登录按钮时,请勿提及 G+ 或使用红色。 符合我们更新后的 品牌推广指南

大多数 G+ 登录应用都会请求进行一些范围的组合: plus.loginplus.meplus.profile.emails.read。您需要重新映射 如下:

旧范围 新范围
plus.login profile
plus.me openid
plus.profile.emails.read email

许多 Google+ 登录功能的实施者曾使用 代码流。这意味着 Android、iOS 或 JavaScript 应用从 Google 获取 OAuth 代码;以及 客户端会将该代码和跨网站请求一起发送回服务器 防欺诈。然后,服务器会验证代码并获取刷新信息, 访问令牌,从 people.get API 提取用户个人资料信息。

Google 现在建议您请求一个 ID 令牌,并从 从客户端复制到服务器ID 令牌具有跨网站伪造防护 也可在服务器上进行静态验证,这样可以避免 额外的 API 调用从 Google 的服务器获取用户个人资料信息。按照 有关如何在服务器上验证 ID 令牌的说明。

如果您仍想使用代码流程获取个人资料信息, 可以这样做。服务器拥有访问令牌后,您需要 获取用户个人资料信息 从登录流程中指定的 userinfo 端点中 发现文档。API 回复的格式与 Google+ 个人资料回复不同,因此, 需要将解析更新为新格式。

迁移 HTML 登录按钮

如果您通过课程作业在页面上添加了 Google+ 登录按钮 g-signin 添加到元素中,请进行以下更改:

  • <meta> 标记中指定客户端 ID 时,data- 属性或参数对象,请将字符串 clientid 更改为 client_id,如以下示例所示:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • g-signin2 类分配给登录按钮元素,而不是将其分配给登录按钮元素 g-signin。此外,您应指定单独的成功和失败回调,而不是 单个回调,如以下示例所示:

    <!-- Google+ Sign-in (old) -->
    <div
      class="g-signin"
      data-callback="signinCallback">
    </div>
    

    <!-- Google Sign-in (new) -->
    <div
      class="g-signin2"
      data-onsuccess="onSignIn"
      data-onfailure="onSignInFailure">
    </div>
    
  • 您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    
  • 这些更改会将您的默认范围更新为 profile email openid。 您可以获取用户的基本个人资料信息,例如姓名、电子邮件地址和照片 如下所示:

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      let profile = googleUser.getBasicProfile();
      let fullName = profile.getName();
      let email = profile.getEmail();
      let imageUrl = profile.getImageUrl();
    }
    

迁移动态呈现的登录按钮

如果您通过调用 gapi.signin.render(),请进行以下更改:

  • <meta> 标记中指定客户端 ID 时,data- 属性或参数对象,请将字符串 clientid 更改为 client_id,如以下示例所示:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • 使用 gapi.signin2.render()(而不是)呈现登录按钮 gapi.signin.render(),如以下示例所示:

    // Google+ Sign-in (old)
    gapi.signin.render('myButton', additionalParams);
    

    // Google Sign-in (new)
    gapi.signin2.render('myButton', additionalParams);
    
  • 您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    

这些更改会将您的默认范围更新为 profile email openid。您可以 使用 getBasicProfile() 方法获取用户的基本个人资料信息。

迁移 JavaScript 发起的登录流程

如果您在登录时调用 gapi.auth.signIn() 来启动登录流程, 点击登录按钮,然后进行以下更改:

  • <meta> 标记中指定客户端 ID 时,data- 属性或参数对象,请将字符串 clientid 更改为 client_id,如以下示例所示:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • 点击按钮后,使用 gapi.auth2.attachClickHandler() 启动登录流程 ,如以下示例所示:

    // Google+ Sign-in (old)
    var signinButton = document.getElementById('signinButton');
    signinButton.addEventListener('click', function() {
      gapi.auth.signIn(additionalParams);
    });
    

    // Google Sign-in (new)
    auth2 = gapi.auth2.init();
    auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
    
  • 您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    

这些更改会将您的默认范围更新为 profile email openid。您可以 通过调用 getBasicProfile() 获取用户的基本个人资料信息 方法。

迁移混合服务器端流

如果您之前使用 JavaScript API 获取了一次性授权代码 要传递给服务器,请进行以下更改:

  • 将范围从 https://www.googleapis.com/auth/plus.login 更改为 profile

  • 使用现有回调的 gapi.auth2.grantOfflineAccess() 方法 函数,如以下示例所示:

    <!-- Google+ Sign-in (old) -->
    <div class="g-signin"
      data-scope="https://www.googleapis.com/auth/plus.login"
      data-clientid="YOUR_CLIENT_ID"
      data-redirecturi="postmessage"
      data-accesstype="offline"
      data-callback="signInCallback">
    </div>
    

    // Google Sign-in (new)
    auth2 = gapi.auth2.init({
      client_id: 'YOUR_CLIENT_ID',
      scope: 'profile'
    });
    
    ...
    
    auth2.grantOfflineAccess().then(signInCallback);
    

如果您还需要访问用户的电子邮件,请将 email 添加到 scope 参数。