从Google+ API迁移Google登录身份验证2(浏览器弹出窗口)

时间:2018-12-21 11:07:47

标签: google-api google-plus google-signin google-oauth2

在我们的应用中,我们有一个简单的Google登录流程,其中会打开一个弹出窗口,用户登录并授予我们脱机访问Google Analytics(分析)的权限。

我们刚刚收到一封电子邮件,通知我们正在使用即将弃用的Google+ API(plus.people.getOpenIdConnect方法),但是我们没有在代码中使用它。

我似乎无法弄清楚我们在哪里使用Google+ API,因此可以替换它。

这是我们的简单代码:

  prepareGoogleClient() {
    $.ajax({
      url: "//apis.google.com/js/client:platform.js",
      dataType: "script"
    }).done(() => {
      gapi.load("auth2", () => {
        let auth = gapi.auth2.init({
          client_id: ENV.googleClientId,
          scope:
            "https://www.googleapis.com/auth/analytics.readonly https://www.googleapis.com/auth/webmasters.readonly"
        });

        this.auth = auth;
      });

      if (gapi.auth2 && !this.auth) {
        this.auth = gapi.auth2.getAuthInstance();
      }
    });
  }

稍后我们调用this.auth.grantOfflineAccess(params),它将返回我们稍后保存的令牌。

如果我在Google平台仪表板中禁用了Google+ API,则登录会停止工作,并且弹出窗口会以登录错误作为响应。我还能够确认Google+ API(从其指标面板)确实在我们的用户登录弹出窗口并授予范围权限的过程中使用。

我该如何重写它以便不使用已弃用的plus.people.getOpenIdConnect方法?

2 个答案:

答案 0 :(得分:1)

问题出在处理OAuth2的Rails后端代码中。过时的omniauth-google-oauth2宝石正在使用已弃用的Google+端点。

答案 1 :(得分:-1)

我认为每个在其应用中使用Google+ API的人都收到了该邮件。 不知道这是否有帮助,但这是从Google API的网站获得的。

  

Google+登录功能已被弃用,并且还将   将于2019年3月7日关闭。开发人员应迁移到更多   全面的Google登录身份验证系统。

https://developers.google.com/+/web/api/javascript

https://developers.google.com/+/integrations-shutdown

其他参考文献:

  1. 要删除的API列表https://developers.google.com/+/api-shutdown
  2. 新符号(身份)https://developers.google.com/identity/
  3. 网络应用https://developers.google.com/identity/sign-in/web/的身份

将Google登录添加到您的Web应用

function onSignIn(googleUser) {
  // Useful data for your client-side scripts:
  var profile=googleUser.getBasicProfile();
  console.log("ID: " + profile.getId()); // Don't send this directly to your server!
  console.log('Full Name: ' + profile.getName());
  console.log('Given Name: ' + profile.getGivenName());
  console.log('Family Name: ' + profile.getFamilyName());
  console.log("Image URL: " + profile.getImageUrl());
  console.log("Email: "+profile.getEmail());
  // The ID token you need to pass to your backend:
  var id_token=googleUser.getAuthResponse().id_token;
  console.log("ID Token: "+id_token);
}
<html lang="en">

<head>
  <meta name="google-signin-scope" content="profile email">
  <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
  <script src="https://apis.google.com/js/platform.js" async defer></script>
</head>

<body>
  <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>

</body>

</html>