CrossBridge Lab

技術ネタ、デバイスネタを...

iOSアプリで Firebase の認証機能を使う

はじめに

f:id:crossbridge-lab:20160227075909p:plain

先日、BaaS の1つである Firebase の勉強がてらサンプル的なiOSのチャットアプリを作ったので、引き続き Firebase の機能を触ってみることにしました。今回は認証機能を使ってみようと思います。

先日の記事はこちら。

crossbridge-lab.hatenablog.com

Firebaseが提供する認証方法

Firebaseでは以下の認証方法を提供しています。

今回はメールアドレスとパスワードでの認証で試してみます。

Email & Password での認証を有効にする

まずFirebaseのページにログインし、アプリの管理画面でEmail & Passwordでの認証を有効にする必要があります。左側のメニューからLogin & Authを選択し、Email & PasswordタブのEnable Email & Password Authenticationにチェックを入れます。

f:id:crossbridge-lab:20160227085009p:plain

アカウントの作成

アカウントの作成方法は Firebase の管理画面で行う方法と、SDKにアカウント作成のAPIがあるので実装してアプリ内でユーザ自身にアカウントを作らせる方法があります。

管理画面でアカウントを作成する

Email & PasswordタブのEnable Email & Password Authenticationにチェックを入れるとその画面の下にRegistered Usersという表示が追加されます。右側にあるAdd Userボタンをクリックします。

f:id:crossbridge-lab:20160227084944p:plain

メールアドレスとパスワードを入力するダイアログが表示されるので入力してAdd Userボタンをクリックすればアカウント追加完了です。

f:id:crossbridge-lab:20160227084951p:plain

アプリ内でアカウントを作成する

Firebase の SDK にはアカウント作成の API も用意されているのでアプリ内でユーザ自身にアカウントを作成してもらうことも可能です。FirebaseクラスのcreateUserメソッドを使ってメールアドレスとパスワードを指定してアカウントを作成します。

createUserメソッドを使ってアカウント作成を行っただけではログイン状態にはなりません。実際のアプリで起動時にアカウントをユーザに作成してもらったあとはそのまま後述のログインAPIを呼ぶことになるでしょう。

let firebaseRef = Firebase(url:"https://◯◯.firebaseio.com")
firebaseRef.createUser("メールアドレス", password: "パスワード") { error, result in
    if error != nil {
        // アカウント作成失敗時の処理
    } else {
        // アカウント作成成功時の処理
    }
}

Email & Password を使ってログインする

作成したアカウントでアプリ内で認証(ログイン)を行います。FirebaseクラスのcreateUserメソッドを使います。

firebaseRef.authUser("メールアドレス", password: "パスワード") {
    error, authData in
    if authData != nil {
        // ログインに失敗時の処理
    } else {
        // ログインに成功した時の処理
        print(authData.uid)
    }
}

アクセスルールを変更する

ログインしている場合のみデータにアクセスできるようにアクセスルールを変更します。管理画面の左側のメニューでSecurity & Rulesを開きます。

f:id:crossbridge-lab:20160227091721p:plain

以下のように修正することでログインしている場合のみデータにアクセスできるようになります。

{
    "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
    }
}

まとめ

Firebase で Email & Password を使って認証を行うことはこのようにちょっとしたコードで実現可能です。Facebook等を使った認証もそれぞれのサービスでアプリを登録する必要がありますが Firebase 側の処理は簡単に行えるようなので時間がある時にまた試してみようと思います。