JavaScript を使用して Firebase 匿名認証を行う

Firebase で認証する一時的な匿名アカウントを、Firebase Authentication で作成して使用できます。一時的な匿名アカウントを使用すると、アプリに登録していないユーザーが、セキュリティ ルールで保護されているデータを使用できるようになります。匿名ユーザーのアプリへの登録では、ログイン認証情報を匿名アカウントにリンクして、以後のセッションでも引き続き、保護されているデータを使用可能にできます。

準備

  1. Firebase を JavaScript プロジェクトに追加します
  2. アプリを Firebase プロジェクトに接続していない場合は、Firebase console で接続します。
  3. 匿名認証を有効にします。
    1. Firebase console で [認証] を開きます。
    2. [ログイン方法] ページで [Anonymous] を有効にします。

Firebase 匿名認証を行う

ログアウトしたユーザーが Firebase での認証を必要とするアプリ機能を使用している場合は、次の手順に沿って匿名でのユーザーのログインを行います。

  1. signInAnonymously メソッドを呼び出します。
    firebase.auth().signInAnonymously().catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // ...
    });
    
    ここではエラーの検出と対応もできます。エラーコードのリストについては、Auth のリファレンス ドキュメントをご覧ください。
  2. signInAnonymously メソッドがエラーにならずに完了した場合、onAuthStateChanged に登録されたオブザーバーがトリガーされ、匿名ユーザーのアカウント データを User オブジェクトから取得できます。
    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        var isAnonymous = user.isAnonymous;
        var uid = user.uid;
        // ...
      } else {
        // User is signed out.
        // ...
      }
      // ...
    });

匿名アカウントを永久アカウントに変換する

匿名ユーザーのアプリへの登録では、新しいアカウントによる作業の続行が場合により必要です。たとえば、アプリへの登録前にユーザーがショッピング カートに追加したアイテムを、新しいアカウントのショッピング カートに追加できるようにします。これを行う手順は次のとおりです。

  1. ユーザーがアプリに登録したら、ユーザーの認証プロバイダのログインフローを行います(ただし、いずれかの Auth.signInWith メソッドを呼び出す手前まで)。たとえば、ユーザーの Google ID トークンFacebook アクセス トークン、またはメールアドレスとパスワードを取得します。
  2. 新しい認証プロバイダの AuthCredential を取得します。

    Google ログイン
    var credential = firebase.auth.GoogleAuthProvider.credential(
        googleUser.getAuthResponse().id_token);
    
    Facebook ログイン
    var credential = firebase.auth.FacebookAuthProvider.credential(
        response.authResponse.accessToken);
    
    メールとパスワードによるログイン
    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
    
  3. ログイン ユーザーの link メソッドに AuthCredential オブジェクトを渡します。

    auth.currentUser.link(credential).then(function(user) {
      console.log("Anonymous account successfully upgraded", user);
    }, function(error) {
      console.log("Error upgrading anonymous account", error);
    });
    

link の呼び出しが成功したら、ユーザーの新しいアカウントが匿名アカウントの Firebase データにアクセスできるようになります。

次のステップ

これで、ユーザーが Firebase で認証できるようになったため、Firebase ルールを使用して、Firebase データベースのデータに対するユーザーのアクセス権を制御できます。

フィードバックを送信...