LINEログインとFirebase Authenticationを連携した話

これまで兼業中のベンチャーの方では、ユーザー認証をFirebase Authenticationのメールアドレス・パスワード認証に全て任せていたのですが、ここにきてLINEログインを使用したいとの要望があったので、対応を記録に残してみます。

画像3

前提

Googleやfacebookなどの主要プロバイダを使った認証システムはFirebase Authenticationで速攻導入ができるのですが、残念なことにLINEログインはサポートされていません。

サポートされていると具体的に何が嬉しいのかというと、FirebaseのSDKをインポートして firebase.auth().signInWithPopup(グーグルプロバイダ) のように書くだけで、Firebaseが裏でUserIDを作成して、よしなに紐づけてくれるんですね。なので、Firebaseのユーザーとしてその他のFirebase機能についてもそのまま使える訳です。

これが、LINEのようにサポートされていない認証プロバイダだと、LINEログインで認証されたユーザーに対応するFirebaseのユーザーを作成して紐づけるということが必要になるんです。。。ここ、少しちゃんと考えないと後々面倒なことになりそうなんです。

要件

社長の要望を聞きながら、主な要件を次のように整理しました(適当)

① Firebaseのメールアドレス・パスワード認証がベース(メールアドレス認証が必要)
② LINEログインも使えるようにして、Firebaseでのユーザー情報を管理したい
③ たぶんいつかGoogleとかとも連携したいってなる(後に要望されたときに苦しみたくない)

まず考えたこと(ボツ案)

Firebase Authenticationでは、カスタム認証という機能が用意されていて、この機能を使うとFirebase上のUserIDを自由に指定してユーザーを作成することができます。

この機能を単純に使えば、例えば「LINEログインして取得したLINEのUserIdを、そのままFirebaseに登録する」といったことができるようになるんですね。そうしておけば、その後もLINEログインした時に、取得したトークンを用いて signInWithCustomToken(トークン) することで、該当のFirebaseユーザーとしてログインすることができます。外部テーブルを用意して紐づけることもなく楽ですね。

しかし、この方法だと、他の認証プロバイダで既に作成されているユーザーがLINEログインも連携したいなんてなった時に対応できないんです。。
また、LINEで登録したユーザーの場合でも、それ以外のサポート外プロバイダを使用したいなんて社長が言い出したらもうごっちゃになっちゃいます。(絶対言い出すと思ってる)

このため、面倒ですが最低限外部テーブルなどでの紐付けが必要だと腹を括りました。

採用案

最終的に採用したフローは次の通りです。

LINEログイン
→ 取得したemailとランダム生成PWでFirebaseユーザーを作成
→ 生成されたUserIDをキーにFirestoreのuserテーブルにLINE UserIDを登録

画像1

具体的なところは後日追記します〜

https://developers.line.biz/ja/docs/line-login/integrate-line-login/



この記事が気に入ったらサポートをしてみませんか?