LoginSignup
3
2

More than 3 years have passed since last update.

@angular/fireのAuth Guardsで認証チェックをする

Last updated at Posted at 2019-06-20

概要

@angular/fireのv5.2.0でAuth Guardsが追加されました。
これにより、自前でguardを書かなくても認証チェックが可能になりました。
ただ、v5.2.1の時点では上手く動かない問題がありました。

基本的な使い方

まずapp.module.tsのimportsにAngularFireAuthGuardModuleを追加します。
あとはguardを指定するだけでログイン済みかどうかチェックすることができます。
コードとしては下のようになります。

import { AngularFireAuthGuard } from '@angular/fire/auth-guard';

export const routes: Routes = [
    { path: '', component: AppComponent },
    { path: 'items', component: ItemListComponent, canActivate: [AngularFireAuthGuard] },
]

カスタマイズ

デフォルトではログイン済みかチェックするだけですが、authGuardPipeを使ってカスタマイズすることもできます。
リダイレクト先の変更や、custom claimsのチェックなどが提供されています。

import { canActivate, redirectUnauthorizedTo } from '@angular/fire/auth-guard';

const redirectUnauthorizedToLogin = redirectUnauthorizedTo(['login']);

export const routes: Routes = [
    { path: '', component: AppComponent },
    { path: 'items', component: ItemListComponent, ...canActivate(redirectUnauthorizedToLogin) }
];

問題

v5.2.1の時点で認証をカスタマイズした場合、production buildでうまく動きませんでした。
canActivate関数を使わずに下のように書くとちゃんと動きました。

const redirectUnauthorizedToLogin = () => redirectUnauthorizedTo(["login"]);

const routes: Routes = [
  {
    path: "items",
    component: ItemListComponent,
    canActivate: [AngularFireAuthGuard],
    data: { authGuardPipe: redirectUnauthorizedToLogin }
  }
]

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2