メールアドレス認証 - UnityでSDKなしでFirebaseを使う
Unityからのメールアドレスとパスワードを使った認証方式を解説します。
この投稿はUnityでSDKなしでFirebaseを使うの一部です。
ソースコード全体は以下にあります。
Firebase Authenticationの設定
サイドメニュー Authentication > Sign-in method タブ
の画面から メールアドレス / パスワード
を有効にします。
Unity側のユーザー登録の実装
Firebasseプロジェクト作成で取得したAPIキー
を使用してユーザー登録を行います。
ユーザー登録のAPIは登録したレスポンスとして、idToken
とrefreshToken
が返ってきます。
idToken
とrefreshToken
についてはログインの実装部分で説明します。
var _apiKey = "APIキー";
var inputEmail = "メールアドレス";
var inputPassword = "パスワード";
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/json";
var url = $"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key={_apiKey}";
var requestBody = new FirebaseApi.EmailPasswordAuthRequest(inputEmail, inputPassword).ToJson();
var response = wc.UploadString(new Uri(url), requestBody);
Debug.Log($"idToken: {authResult.idToken}");
Debug.Log($"refreshToken: {authResult.refreshToken}");
参考: https://cloud.google.com/identity-platform/docs/use-rest-api#section-create-email-password
ユーザー追加の確認
AuthenticationのUsersタブで登録されたユーザーを確認することができます。
Unity側のログインの実装
ログインについてはユーザー登録とurlが異なるだけで処理の流れは同様です。
var _apiKey = "APIキー";
var inputEmail = "メールアドレス";
var inputPassword = "パスワード";
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/json";
var url = $"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={_apiKey}";
var requestBody = new FirebaseApi.EmailPasswordAuthRequest(inputEmail, inputPassword).ToJson();
var response = wc.UploadString(new Uri(url), requestBody);
var authResult = FirebaseApi.EmailPasswordAuthResponse.FromJson(response);
Debug.Log($"idToken: {authResult.idToken}");
Debug.Log($"refreshToken: {authResult.refreshToken}");
レスポンスのidToken
はFirebaseでユーザーを識別しアクセストークンの役割をもつトークンで、他のFirebase関連のサービスを利用する際の認証情報として使います。idToken
の有効期限は30分程度なので、有効期限が切れてしまった場合はrefreshToken
を使用して新しいidToken
を取得します。このrefreshToken
をローカルストレージなどに保存することで、パスワードを保存せず安全にログイン状態を保つことができます。
具体的なトークンのリフレッシュ方法については別の投稿で解説します。
参考: https://cloud.google.com/identity-platform/docs/use-rest-api#section-sign-in-email-password
その他補足
AndroidでNameResolutionFailure例外が発生する場合は、
Player settings
の Internet Access
を required
に設定してください。
Discussion