Firebaseの認証機能を利用してサーバーサイドでユーザー操作を行う
今回、初めてfirestore以外でのユーザー操作を行い、参考サイトが少なかったので書いてみました!
Firebaseでの認証を行い、登録されているユーザーに対して操作を行う時のFirebaseのモジュールの使用方法です。今回は使用した言語がPythonのため、Pythonでの書き方を中心に行います。
Firebaseの認証機能を導入済みの方が対象です。
Firebaseの認証機能とは
Firebaseはクラウドベースのプラットフォームであり、ユーザーの認証やデータベースの管理など、さまざまな機能を提供しています。サーバーサイドでユーザー操作を行うためには、まずFirebaseの認証機能を設定する必要があります。
Firebaseの認証機能を使用することで、ユーザーを登録し、ログイン、ログアウトなどの操作を簡単に行うことができます。また、Firebaseのデータベースを使用することで、ユーザーの情報を保存し、必要なデータを取得することもできます。
Firebaseの認証機能を利用してサーバーサイドでユーザー操作を行うことで、安全かつ効率的なユーザー管理が可能となります。
Firebaseに用意されているモジュール
firebase_admin
主な使用方法
認証機能を使用してGoogleアカウントでの認証を行なったり、登録されたユーザーの確認、操作を行うことができます。
Firebaseの認証機能を利用すると、サーバーサイドでユーザー操作を行うことができます。
ユーザーの操作を行うにはUIDを使用した操作が求められます。
UIDを取得し、そのUIDを使用して該当ユーザーに対して操作を行います。
まずfirebase_admin
モジュールをimportして、firebase_admin.initialize_app()
でSDKを初期化してから使用します。
この時に複数回SDKの初期化を行おうとすると、エラーを吐くので注意してください
Firebase Admin の二重初期化エラーの対策(modular版)Zenn
Firebaseに登録されているユーザー情報に対して更新を行う
Firebaseのユーザーを特定するためにDBに対して一意のデータを取得する。
Firebaseのユーザー検索で使用できるのは、電話番号(phoneNumber)、メールアドレス(email)、uidになります。FirebaseのuidをDBに保存していない限り、phoneNumberかemailの二択になるかと思いますので、ここではemailを取得する方法で行います。
ちなみに、ユーザーに対しての更新でemailを使用することはできません。
通常通りuserテーブルからemailを取得します
def get_user_email(user_id : int):
user_email = db.query(User.email).filter(User.id == user_id).one()
取得したemailを使用して、Firebaseに対してユーザー検索を行います。
from firebase_admin import auth
def get_user_by_email(user_email: string)
user = firebase_admin.auth.get_user_by_email(user_email)
この時、受け取る値としては
{
uid: 該当ユーザーのuid,
display_name: 該当ユーザーの氏名,
email: 該当ユーザーのemail
}
が取得することができます
firebase_admin.auth.get_user_by_email()
を使用して得たuid
を使用してFirebaseのユーザー情報に対して操作を行います
使用例として削除処理を行います。
firebase_admin.auth.delete_user(uid)
uid
の部分に引数として上記で取得したuid
を渡してメソッドを実行します
そうするとFirebaseコンソールでユーザーの削除が行えているかと思います。
削除したくない方はfirebase_admin.auth.update_user(uid)
で更新処理を試してみてください。
以上、Firebaseでのユーザー操作でした。
こちらの記事はアルサーガパートナーズアドベントカレンダーの14日目の記事です。
他の記事は下記リンクをご参照ください
アルサーガパートナーズ株式会社のエンジニアによるテックブログです。11月14(木)20時〜 エンジニア向けセミナーを開催!詳細とご応募は👉️ arsaga.jp/news/pressrelease-cheer-up-project-november-20241114/
Discussion