Firebase のログイン機能だけを使う!

記事
IT・テクノロジー

Firebase のログイン機能だけを使う!

前回の記事で、Web サイトのアクセス権限を細かく設定するには、ユーザー認証機能(ログイン機能)が必要だということを投稿しました。アクセスする利用者を区別するためには、ユーザー認証などによる利用者の特定が必要不可欠ですが、それ以外にもユーザー認証のイベントの検出やセッションの管理など必要な事はたくさんあります。

他の部分は、SQL などのデータベースを利用するなどする場合でも、こうしたユーザー認証(ログイン機能)に関連して必要な実装には手間も時間もかかります。Firebase を使うというと全てのバックエンドに関連した機能を Firebase で実装するように考えがちですが、一部の機能だけを利用するというのもありです!


ユーザー認証はログインだけではない!
ユーザー認証の中心的な機能はログイン機能です。ユーザ名とパスワードを入力して「本人を特定する」というのは機能の中心であることに間違いはありません。このユーザー名とパスワードでの認証自体は、自分で作成してもそれほど複雑ではありません。基本的にユーザーのデータベースとパスワードの一致をチェックする機能があれば実現できるので実装としては比較的簡単です。

しかし、セキュリティを考えるとパスワードをそのままの形でデータベースに保存するのは問題があるので、通常は暗号化(ハッシュ化)して保存するのが普通です。さらに、パスワードを忘れた場合のリカバリーの処理や、パスワードの変更などの処理が必要になります。さらに、ログインの状態が変化するイベントの検出も重要です。ログアウトした場合は、特定の利用者のみに限定したページの表示を切り替えたりする事が必要なので、こうした「状態の変化」を検出して必要な処理を行う必要が出てきます。

きちんと状態やセッションを管理しないと、ネットカフェなど端末を共有して利用する場合など、本来アクセスできない情報が他人に見えることの無いようにする事が難しくなります。

もちろん、必要な処理がわかっていれば作れば良いだけですが、実際の開発量は意外に大きなものになります。

良いとこ取りをしよう!
そうした場合に、便利なのは Firebase のユーザー認証機能(ログイン機能)だけを使うという方法があります。 Firebase を使うというと全ての機能を Firebase を利用して作ると考えがちですが、そういうわけではありません。必要で便利な部分だけを使うという方法もあります。いわゆる「良いとこ取り」です。

データベース周りなどは、自分で SQL などのデータベースを利用して、ユーザー認証(ログイン)の部分だけを Firebase を使って実現するという方法です。Firebase の料金体系は従量制で、使った量に応じて課金する仕組みです。アクセスが多いと無料枠の使用量を超えてしまうことがあって、扱うデータによっては割高になるようなアプリケーションも多いものです。 しかし、使用をユーザー認証などに限定すると、大抵の場合は無料枠で賄えるケースが多くなります。

以前開発したアプリケーションでコンピュータの設計支援のアプリがありましたが、設計データのデータが一つの設計(コンピュータのメインボード)で 10000 件を超えてしまうので、簡単に Firebase の無料枠を超えてしまうケースがありました。このアプリの場合利用するユーザーはせいぜい 20〜30 人なので、ユーザー認証を行うだけならば十分に無料枠内で収まりました。そこで、データベースだけを別に SQL のデータベースをサーバー側に用意して実装して、ログイン機能は開発の工数を減らすために Firebase を採用してアプリを実装したところ、短期間でかつ運用コストも抑えたアプリにすることができました。

状態の変化を検出するのは面倒
ログインをしたり、ログアウトをした場合の利用者の状態が変化するイベントを検出するのは意外に面倒です。 例えば、ログインやログアウトのボタンを押した場合の処理は、ボタンの操作に関連づけて処理すれば良いので比較的簡単です。 しかし、最近のブラウザは複数のタブを使って Web ページを表示することが可能です。通常ログインの処理は、タブ毎に行うわけではなく、サイト毎に行うのが普通です。その場合、ログアウトをした場合、表示中の他のタブの表示も切り替える必要があります。この場合、ログインやログアウトのボタンを操作したページ以外のタブでは、利用者がログアウトしたのかどうかは直接は知ることができません。これは、ボタンのクリックという操作が行われたタブとは違うタブであるため、この方法で状態の変化がわからないという事です。

変化を見つける方法はいくつかありますが、基本的には定期的にデータベースのログインの状態をチェックするという方法になります。 あるいは、セッションをクッキーのデータを使って管理するということになります。こうした「仕組み」をきちんと理解している場合は、実際の実装はそれほど難しくはありませんが面倒です。

Firebase の場合は、こうした状態の変化を検出して関数を呼び出したり、セッションの管理をする方法が予め用意されています。 従って、実装する場合でも、この予め用意された機能を利用すれば良いだけで本来のアプリの機能に集中することができます。

こうした機能を、簡単な Javascript のコードで利用できるので、大抵の Web アプリや Web サービスで利用することが可能になります。

セキュリティ上の利点
セキュリティ対策は簡単ではありません。完璧なセキュリティ対策をするのは現状ではかなり難しいのも事実です。 しかし、セキュリティの強さは、いかに多くのケースを想定しているかで決まります。 当たり前ですが、これには経験と知識がものを言います。初心者の場合、こうしたセキュリティの知識や経験は限定的で想定外のケースもたくさんできてしまいます。セキュリティ上の問題は、ビジネス上大きなダメージの原因になる場合も多く、より良いセキュリティ対策を考慮している方が良いのは間違いありません。

ユーザー認証の場合、基本機能は比較的シンプルで初心者でも簡単に実装できますし、インターネットにはたくさんのサンプルや実装の仕方の情報があります。しかし、実用になるセキュリティを考慮しているかどうかは見極めるのは難しいのが現状です。Firebase のユーザー認証機能も完璧というわけではありませんが、通常の人が考えるレベル以上の考慮がされていると思います。少なくても、初心者がインターネットの情報を元に実装するログイン機能よりはいろいろなケースを考慮した設計になっていると考えてほぼ問題はありません。

作成したアプリやサービスを利用者に安心して使っていただくためには、Firebase のユーザー認証機能は一定のレベル以上の実装だと思います。こうしたところを上手く利用して Web アプリや Web サービスに組み込むというのは大きなアドバンテージがあると言えます。

まとめ
Firebase の機能を利用する場合、全てを Firebase を使って実装する必要性はありません。 必要な機能を上手く取り込んで、自分の開発する Web アプリや Web サービスに生かすという使い方が Firebase を上手く利用するコツです。

その中で、Firebase のユーザー認証機能(ログイン機能)は利用可能な範囲も広く便利な機能です。

実際に、同等の機能を自分でゼロから実装するのは、テストの時間などを含めると相当時間のかかる作業です。 そうした既存の機能に時間をかけるのではなく、既に存在する Firebase の機能を利用してしまうのは特にフリーランスの場合大きな魅力です。ユーザー認証機能はセキュリティにも関連した重要な機能で、この機能の不具合はセキュリティ上大きな問題になる場合も少なくありません。Firebase のセキュリティ機能も完璧というわけではないと思いますが、多くの人が既に実装して利用している機能で、大きな問題点は非常に少ないと考える事ができます。

そう考えると、特に初心者で、セキュリティに関する知識や経験が少ない場合でも一定レベルのセキュリティを実現する良い方法です。

運用コスト上も、ユーザー認証だけならば殆どのサービスでも無料枠内でも十分に対応可能な範囲に抑えることも十分可能です。既存の機能を上手く自分のサービスに組み込むケースとして、Firebase のユーザー認証機能はおすすめの機能です!


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す