あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

もっと簡単に、AngularなSPAでGoogleのOAuth認証を行う方法

はじめに

先日、Angular で Google の OAuth 認証を行う方法として、かなり頑張って以下の方法をご紹介しました。

www.aruse.net

ですが、さらに調べてみると Google でも Facebook と同じような SDK が用意されていて、簡単に OAuth 認証できることが分かりました。

developers.google.com

Google OAuth 認証

Google API Console でクライアント ID を取得するところまでは同じなのですが、OAuth認証はindex.htmlを以下のように書き換えるだけで実装可能です。

<html lang="jp">
  <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>
    <script>
      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);
      };
    </script>
  </body>
</html>

これを実行すると、正しく Google の認証画面がポップアップで表示され、ユーザー情報も正しく取得することができました。

あの苦労は一体何だったのかという感じですが。💦

ちなみに、Google のログインボタンは SDK のものだけでなく、公式サイトからダウンロードすることもできます。

Sign-In Branding Guidelines  |  Google Identity Platform  |  Google Developers

ログアウト処理

ログアウト(サインアウト)処理は以下の関数を呼び出すことで実行可能です。

    function signOut() {
        var auth2 = gapi.auth2.getAuthInstance();
         auth2.signOut().then(function () {
          console.log('User signed out.');
       });
    }

ログインステータス取得

ログインステータスは以下の関数を呼び出すことで取得できます。

    function loginCheck() {
      var auth2 = gapi.auth2.getAuthInstance();
      if (auth2.isSignedIn.get()) {
          console.log('login now.');
      } else {
          console.log('logout now.');
      }
    }

おわりに

Google OAuth 認証はなかなかまとまった情報がないので、集めるのに苦労しました。

公式サイトには一応書いてあるのですが、そこにたどり着くのが、なかなか。

この記事が、参考になれば幸いです。