firebase ユーザー認証で独自のUIを使う方法.md

firebase ユーザー認証で独自のUIを使う方法.md

firebase でユーザー認証を行う

Firebaseを使うと、簡単にユーザー認証が行えます。独自の認証処理やユーザーデータを管理しなくて良いので大変便利です。

Firebaseを使ったユーザー認証方法は上記記事でまとめました。そこでは FirebaseUI というあらかじめFirebase側で用意されているUIツールを用いてログインフォームを作成しましたが、実際には独自にUIを定義してログイン(サインイン)などの処理を行いたいというケースが多いと思います。

ここでは FirebaseUI を使わず独自にUIを定義し、認証処理も自分でSDKの処理を呼び出すJavascriptを書いて実装していきます。

準備

firebaseの下準備はすべて この記事 のとおりです。参考にしてユーザープールを用意しておきます。

ユーザー認証スクリプト

ログイン画面のサンプルです。

メールアドレスとパスワード入力欄、それからアカウント作成、ログイン、ログアウト用のボタンを用意します。ログイン結果等を表示するための要素を網易しておきます。

HTML

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <!-- firebaseのスクリプト -->
    <script src="https://www.gstatic.com/firebasejs/4.10.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.10.1/firebase-auth.js"></script>

    <title>Document</title>
</head>
<body>

    <input type="text" id="email" placeholder="email" />
    <input type="password" id="password" placeholder="password" />
    <input type="button" value="SignUp" onclick="signUp()" />
    <input type="button" value="SignIn" onclick="signIn()" />
    <input type="button" value="SignOut" onclick="signOut()" />
    <p id="log"></p>
    <p id="state"></p>

    <!-- このファイルに認証用の処理を実装します。 -->
    <script src="firebase-auth.js"></script>
</body>
</html>

Javascript(firebase-auth.js)

// Firebaseの初期化
var config = {
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
};
firebase.initializeApp(config);

// アカウント登録
function signUp() {
  var email = document.getElementById('email').value;
  var password = document.getElementById('password').value;

  firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(function(result) {
      console.log(result);
      document.getElementById('log').innerText = 'サインアップ成功';
    }).catch(function(error) {
      console.log('signup error')
      var errorCode = error.code;
      var errorMessage = error.message;
      document.getElementById('log').innerText = 'サインアップ失敗: ' + errorCode + ', ' + errorMessage;
    });
}

// ログイン
function signIn() {
  var email = document.getElementById('email').value;
  var password = document.getElementById('password').value;

  firebase.auth().signInWithEmailAndPassword(email, password)
    .then(function(result) {
      document.getElementById('log').innerText = 'サインイン成功';
    }).catch(function(error) {
      var errorCode = error.code;
      var errorMessage = error.message;
      document.getElementById('log').innerText = 'サインイン失敗: ' + errorCode + ', ' + errorMessage;
    });
}

// ログアウト
function signOut() {
  firebase.auth().signOut().then(function() {
    document.getElementById('log').innerText = 'サインアウト成功';
  }).catch(function(error) {
    console.log(error);
    document.getElementById('log').innerText = 'サインアウト失敗';
  });
}

// ログイン確認
firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // ログイン認証済
    console.log('auth user', user);
    document.getElementById('state').innerText = 'ログイン済(email: ' + user.email + ')';
  } else {
    // No user is signed in.
    document.getElementById('state').innerText = '未ログイン';
  }
});

Javascript の実装はドキュメントの内容を参考にしています。

詳細

ユーザー情報を新規で登録する(サインアップ)処理は firebase.auth().createUserWithEmailAndPassword 関数で行います。文字通りメールアドレスとパスワードでユーザー情報を作成するための関数です。戻り値は Promise です。ユーザー情報の作成に成功すると、同時にサインインも行われます。

ログイン(サインイン)には、firebase.auth().signInWithEmailAndPassword 関数を使用します。同じくPromiseで処理結果が返されます。

ログアウト(サインアウト)には、firebase.auth().signOut 関数を利用します。

各処理完了時に Promise.then で成功時のコールバックを実行していますが、成功時にはログイン状態が変化するので、firebase.auth().onAuthStateChanged 関数に登録したコールバック関数が実行されます。ここで必要な処理を行うと良いでしょう。

動作確認

ログイン状態に変更があると、onAuthStateChanged に登録されたコールバックが実行されているのが確認できます。

以上。

参考URL

Javascriptカテゴリの最新記事