Firebase でチャットを作ってみた(iOS) その3 認証機能を使ってユーザ登録する

前回の記事は一時的にリアルタイムデータベースの読み書きを誰でもできるようにしてチャットを実装しましたが、セキュリティ上はあまり好ましくない状況かと思います(Firebase コンソールでも警告が表示されています)。

今回は Firebase の認証機能を使って、登録ユーザのみがデータベースにアクセスできるようにしたいと思います。
Firebase の認証機能では Google や Twitter などのアカウントを使ってログインすることもできますが、今回は単純なメールアドレスとパスワードによる認証を使います。

0. データベースの読み書き権限をデフォルトの状態に戻す

前回変更したデータベースの読み書き権限をデフォルトの状態に戻しておきます。

この状態で前回のコードを動かすと、エラーが出てデータベースにアクセスできない状態になるはずです。

1. CocoaPods で Auth を追加

Podfile に以下を追加

pod install でインストール

2. パスワード認証を有効にする

パスワード認証を含めて、全ての認証はデフォルトで無効になっているようです。
リアルタイムデータベースの設定時と同様に、Firebase コンソール に行き、プロジェクトを選択します。

概要の少し下にある Authentication の使ってみるをクリックします。

「ログイン方法」のタブで、メール/パスワード を有効に設定します。

3. 画面作成

ユーザ登録、ログイン用の画面を作成します。
新規ユーザ登録(Sign up) と既存ユーザのログイン(Log in) のボタンも作っておきます。

また、今回作ったログイン画面から前回作ったチャット画面への Segue を作成しておきます。(ここでは “talkSegue” とする)

4. 認証コードを実装する

FirebaseAuth を import します。

Sign up ボタンタップ時の動作として、下記のコードを追加します。
createUser でメールアドレスとパスワードで新規にユーザ登録を行います。
成功時は登録している Segue を呼び出してチャット画面へ遷移、失敗時はエラーメッセージを表示するように実装しておきます。

ログインする場合は signIn メッセージを使います。使い方は createUser と同じです。

5. できたコード

今回は認証部分だけの追加になります。

これでログインした状態になるので、再度データベースにアクセスし、チャットができるようになりました。

続きです。


最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。



この記事をシェアする




りゅーた
フリーランスのエンジニアしてます。Android、iOS アプリの開発、対向サーバの開発、C/C++のライブラリ開発が現在のメイン。趣味はテニス。3児の父。 もっと詳しく

Firebase でチャットを作ってみた(iOS) その3 認証機能を使ってユーザ登録する” に対して 3 件のコメントがあります

  1. ronos より:

    iosアプリ開発初心者です。
    りゅーたさんのブログの「Fireabse でチャットを作ってみた(ios)その3 認証機能を使ってユーザ登録する」をXcodeバージョン10.2.1のswift 5.0.1にて参考にさせていただいているのですが、
    FIRAuth()?.createUser(withEmail:email, password:password) { [weak self] (user,error) in
    の部分を記述すると
    FIRAuth has been renamed to Auth Replace FIRAuth with Auth
    とエラーが出て、FIRAuth をAuthに直すと
    createUser側で
    Cannot use optional chaining on non-optional value of type ‘Auth’ Replace ‘?’ with”
    というエラーが起き、signIn側で
    Cannot convert value of type ‘(User?, Error?) -> ()?’ to expected argument type ‘AuthDataResultCallback?’ (aka ‘Optional<(Optional, Optional) -> ()>’)
    というエラーが出るのですがどうすればよいでしょうか?

    1. りゅーた りゅーた より:

      コメントありがとうございます!
      おそらく、記事を書いた時から Firebase のバージョンが上がってしまって最新の Firebase を使った場合とでコードの差分が出ているのではないかなと推測します。
      コメントに書いて頂いてるようにエラーメッセージに従ってひとつひとつ修正していけばよいかとは思いますが、こちらでもコードを最新化しておこうかと思います。

    2. りゅーた りゅーた より:

      こちらでも Firebase のバージョン更新して試したところ、FIRAuth -> Auth にリネームされたのと、signIn のコールバックで渡ってくる引数の型が FIRUser? から AuthDataResult? に変わってたりなどいくつか変更が必要でした。
      記事内のコードを最新の FirebaseAuth (6.2.1) に合わせて書き直したので、また参照いただければと思います!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA