Angular8でFirebaseを使ってGoogleアカウント認証機能を実装する

プログラミング
プログラミング

AngularにはFirebaseを操作できるAngularFireという素晴らしいモジュールがあったので、試しに使ってみました。

簡単にGoogleアカウント認証機能を実装できたので、紹介します。

環境

前回と変わらず、以下の通りです。

  • OS: Ubuntu 18.04
  • Angular: 8.2.14
  • Angular CLI: 8.3.19
  • Node.js: 12.13.0

手順

大まかな流れとしては、以下の通りです。

  • Firebaseでプロジェクト作成
  • AngularからFirebaseを操作するAngularFireをセットアップ
  • トップページにGoogleアカウント認証機能を実装

それでは始めましょう。

Firebaseでプロジェクト作成

Firebaseのサイトにアクセスします。
Googleアカウントが必要なので、持っていない場合は新規に取得しましょう。

Firebaseのサイトにアクセスします。

案内に従ってプロジェクトを作成したら、プロジェクトの設定に移動します。

Project Overview > プロジェクトの設定 

以下の部分を記録します。

「全般タブ」のプロジェクトIDと、ウェブAPIキー

「全般タブ」のプロジェクトIDと、ウェブAPIキーをメモします。

「クラウド メッセージング」タブの送信者ID

「クラウド メッセージング」タブの送信者ID

確認し終わったら、実際に、Aunglarアプリケーションに、Googleアカウントログイン機能を実装していきます。

AngularFireのセットアップ

AngularFireとFirebaseをインストール

$ npm install @angular/fire firebase --save

プロジェクトのパラメーターファイルにFirebaseの設定を追記
「Firebaseのセットアップ」で確認した値を使います。

$ vi src/environments/environment.ts
export const environment = {
  production: false,
  firebase: {
    apiKey: '<ウェブAPIキー>',
    authDomain: "<プロジェクトID>.firebaseapp.com",
    databaseURL: "https://<プロジェクトID>.firebaseio.com",
    projectId: "<プロジェクトID>",
    storageBucket: "<プロジェクトID>.appspot.com",
    messagingSenderId: "<送信者ID>",
  }
};

@NgModuleの設定

$ vi src/app/app.module.ts
...
import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { environment } from '../environments/environment';
...

@NgModule({
  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFireAuthModule
  ],
  declarations: [ AppComponent ],
  bootstrap: [ AppComponent ]
})
export class AppModule {}

ログイン処理を実装

$ vi src/app/app.component.ts
import { Component } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import { auth } from 'firebase/app';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {
  title = 'Portfolio'
  constructor(public afAuth: AngularFireAuth) {
  }
  login() {
    this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
  }
  logout() {
    this.afAuth.auth.signOut();
  }
}

ナビヘッダーの中に、ログインボタンを実装

$ vi src/app/app.component.html
...
    <div *ngIf="afAuth.user | async as user; else showLogin">
      <span style="color: white"> ようこそ{{ user.displayName }}</span>
      <button class="btn btn-primary ml-2" (click)="logout()">Logout</button>
    </div>
    <ng-template #showLogin>
      <button class="btn btn-primary ml-2" (click)="login()">Login with Google</button>
    </ng-template>
...

サーバーを起動して画面を確認すると、画面右上にログインボタンが表示されています。

サーバーを起動して画面を確認すると、画面右上にログインボタンが表示されています。

クリックし、Googleアカウントでログインすると、右上にGoogleアカウント名が表示され、ログインボタンがログアウトボタンに変わっています。

クリックし、Googleアカウントでログインすると、右上にGoogleアカウント名が表示され、ログインボタンがログアウトボタンに変わっています。

以上で、実装完了です。

まとめ

今回は、Firebaseを使って、Googleアカウント認証機能を実装しました。
面倒な認証処理機構を自分で作らなくていいので、非常に便利です。

今回紹介した認証はGoogleアカウントのみですが、他にもFacebookやTwitterなど、有名どころにはだいたい対応しています。

次回は、認証したユーザーをFirestoreに登録する機能を実装します。

コメント

タイトルとURLをコピーしました