Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

Firebase Authentication を用いたユーザ認証

Last updated at Posted at 2022-02-18

Firebase とは

Firebase は 2012年に Firebase 社が公開したアプリ開発プラットフォームで、ユーザ認証、アプリホスティング、データベース、ストレージといったバックエンド機能をクラウドサービスとして利用することができるもの。2014年に Google が買収し現在に至る。利用者が少ないアプリだと無料で利用できることから弊社のデモサイト demoru.net でも利用している。

また最近利用を開始したのだが、Supabase も同様のサービス (BaaS) を提供してくれる。両者の違いはデータベースにあり、Firebase はキー、バリュー型の NoSQL データベースを提供してくれるのに対し、Supabase は PostgreSQL を提供してくれる。

認証機能の最終形

認証機能はサイトの利用形態により、大きく分けると以下の3通りが考えられる。

  1. メール、電話番号などを特定するもの
    メールや電話を用いて利用者に Confirm してもらうことにより、利用可能なメールアドレスや電話番号をサイトが取得したうえで利用可能とするもの
  2. プロバイダー認証で個人を特定するもの
    Google、Apple、Microsoft、Github や、各 SNS アカウントを利用した認証スタイル
  3. ID とパスワードで個人を特定するもの

ログインの敷居をなるべく下げるには、ゲスト利用を前提とする以下のスタイルが考えられる。

  • はじめはログインなし (匿名、ゲスト) で利用していただく
    • 使ってみたい機能がログイン済みユーザを対象にしている場合、匿名利用のユーザはユーザ登録を検討することになる
  • ID + パスワードでのログインを可能にする
    • メールアドレスの登録などを促し、パスワードリセット時の連絡先を取得する
  • メールアドレスでのログインを可能にする
    • ユーザ登録時は指定されたメールアドレスに対して Confirm your signup メールを送信し、メール本文内の Confirm your mail リンクをクリックすることによってメールアドレスの有効性を確認する
    • ログイン時は「メールアドレス + パスワード」を指定するスタイルと、メールアドレスに対して Confirm your ligin メールを送信してメール本文内のリンクをクリックしてもらうスタイルが考えられる
  • 電話でのログインを可能にする
    • ユーザ登録時は指定された電話番号に対してショートメール、または自動音声によって PIN を送信し、ユーザがこれをサイト上で指定することにより電話番号の有効性を確認する
  • Google、Apple、Microsoft、github や、各 SNS アカウントを利用したプロバイダ認証を用いたログインを可能とする

匿名認証

Untitled (8).png

  • ① ログインせずに利用を開始する
  • ② 匿名リクエストを要求
  • ③ 匿名アカウント作成
  • ④ 認証結果

プロバイダ認証

Untitled (7).png

  • ① 認証プロバイダ選択 (ex. Google)
  • ② 認証プロバイダへのリダイレクト
  • ③ 認証プロバイダへログイン (ex. Google ID を指定してログイン)
  • ④ 認証トークンを発行
  • ⑤ 認証トークンを送信
  • ⑥ ユーザアカウント作成 または サインイン (ユーザアカウント取得)
  • ⑦ 認証結果

プロバイダ認証はアプリ側でログイン機能を作らなくて済むため、とてもカジュアルに実装することができる。利用者もログイン情報を登録する必要がないので利便性が高いように思われるが、現実はあまり利用してもらえない。利用者はアプリが認証プロバイダーからどういう情報を得ているかわからないため、アプリを信頼できないと、プロバイダ認証を選択してもらえないんだと推測している。

ID + パスワード認証

Untitled (6).png

  • ① メールアドレスとパスワードを指定
  • ② 入力されたメールアドレスとパスワードを送信
  • ③ アカウント作成 または サインイン
  • ④ 認証結果

メールを用いたメールアドレスの検証を行わない仕組みにしてしまえば、利用者は適当な ID でログインできるようになるため、お試し利用を促進することができる。メールアドレスの検証を行なっていない場合は、パスワードリセットにメールを利用できないため、パスワード不整合でログインできないユーザは、システム管理者とやり取りするか、あきらめて新規ユーザでやり直すことになってしまう。

複数の認証方式をリンクする

匿名認証でログインしているユーザにパスワード認証をリンクする

匿名認証でログインしているユーザは、ログアウトするとそのアカウントにはログインできなくなる。匿名認証中にパスワード認証をリンクすることにより、ログアウト後はパスワード認証でログインできるようになる。

Untitled (10).png

  • ① 匿名ログイン中にメールアドレスとパスワードを指定
  • ② 入力されたメールアドレスとパスワードを送信
  • ③、④ ユーザアカウントを作成し匿名アカウントとリンク
  • ⑤ 認証結果

匿名認証でログインしているユーザに、Googleプロバイダ認証をリンクする方式も上記と同じ流れになる。

また、パスワード認証中のユーザが Googleプロバイダ認証を併用したり、その逆のケースも同様となる。

このように、ユーザは複数の認証方式から好みの認証方式を選択することができ、アプリをお試し利用した結果、このアプリの利用を継続する判断した時点で、より利便性の高い認証方式に変更することが可能となる。

利用停止

以下の3つのケースに対応しなければばらない。

  1. ユーザアカウントを削除する
  2. ユーザアカウントは残すがリンクしている認証方式を削除する
  3. ユーザアカウントは残すが、はじめに登録した認証方式は削除し、リンクしている認証方式は継続して利用する

実装について

弊社では、Firebase と Supabase を用いたさまざまな実装例がありますが、現在公開できている機能は demoru.net での Google プロバイダ認証のみです。

今後はさまざまな認証方式を体験していただけるサイトを用意したいと考えています。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?