從 Google+ 登入資訊遷移

可盡量減少範圍變更對使用者的影響

  1. 如果您的應用程式需要已驗證使用者的電子郵件地址,而您先前已為該目的使用 profile.emails.read,請改用 email
  2. 取得「profile.emails.read」的核准要求獲得核准。請參閱「如何提交驗證申請」一節。
  3. 將先前的使用者權杖撤銷到要從移除範圍中移除,或完全移除應用程式存取權。舉例來說,應撤銷具有 profile.emails.read 存取權的權杖。建議您在使用者使用應用程式時套用撤銷授權,以便立即取得使用者同意聲明。
  4. 提示使用者透過新的範圍 (例如 email) 重新取得同意聲明,不使用 profile.emails.read
  5. 移除即將逐步停用 Google API OAuth 同意畫面設定的範圍。
,瞭解如何調查及移除這項存取權。

將網站從 Google+ 登入程序遷移至 Google 所需的變更 登入方式取決於你使用的 Google+ 登入流程。一般來說, 你必須更新登入按鈕、要求的範圍和操作說明 瞭解如何從 Google 擷取設定檔資訊。

更新登入按鈕時,請勿提及 Google+ 或使用紅色。 遵守新版 品牌宣傳指南

大多數 Google+ 登入應用程式要求存取以下範圍的組合: 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 權杖 用戶端傳送至您的伺服器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();
    }
    

遷移動態轉譯的登入按鈕

如果你在網頁中加入 Google+ 登入按鈕,請撥打 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