カテゴリー: iOS

iOSでFirebase Authenticationを実装してみる その2

はじめに

こんにちは、Yossyです。

前回は、iOSでFirebase Authenticationを使いメールアドレスとパスワードを用いた認証機能と匿名での認証機能を実装してみました。
今回は、認証に付随する各種機能を紹介したいと思います。

匿名アカウントから永久アカウントに変換

匿名アカウントを永久アカウントに変換する処理を実装したいと思います。
下図の様な画面でメールアドレスとパスワードを入力し、ボタンをタップすると匿名アカウントから永久アカウントに変換させたいと思います。

匿名アカウントでログインしておきます。

まずは、入力したメールアドレスとパスワードからAuthCredentialオブジェクトを生成します。
生成したら、使用中の匿名ユーザーを取得し、先程のAuthCredentialオブジェクトを引数に渡しながらlinkwithcredentialメソッドを呼び出します。

@IBAction func convertAccountButtonTapped(_ sender: UIButton) {
        if emailForm.text != nil, passwordForm.text != nil {
            let email = emailForm.text!
            let password = passwordForm.text!
            
            // メールアドレスとパスワードからAuthCredentialオブジェクトを生成する
            let credential = EmailAuthProvider.credential(withEmail: email, password: password)
            // 使用中の匿名ユーザーを取得
            let user = Auth.auth().currentUser
            // 生成したAuthCredentialオブジェクトを引数に渡して、linkwithcredentailメソッドを呼ぶ
            // エラーが無ければ匿名ユーザーから永久ユーザーへの変換が完了する
            user?.link(with: credential) { (authResult, error) in
                if let authResult = authResult {
                    print("匿名ユーザーかどうか:\(authResult.user.isAnonymous)")
                    // 匿名ユーザーかどうか:false
                }
            }
        }
    }

コンソール画面を確認してみると、匿名ユーザーではなく、メールアドレスとパスワードで認証されたユーザーへと変換されている事が確認出来ます。

サインアウト

サインアウト機能も用意されています。
このメソッドはコールバックは必要なく、下記の様に実装するだけです。
これでサインアウトボタンをタップするとサインアウトする事が出来ます。

@IBAction func logoutButtonTapped(_ sender: UIButton) {
        do {
            try Auth.auth().signOut()
        } catch let signOutError as NSError {
            print("Error: \(signOutError)")
        }
        
    }

アカウントの削除

ユーザーアカウントの削除機能も用意されています。
ユーザー削除ボタンをタップすると現在のユーザーアカウントを削除し、ログイン前の画面まで遷移させます。

@IBAction func deleteButtonTapped(_ sender: UIButton) {
        // ログイン中のユーザーアカウントを削除する。
        Auth.auth().currentUser?.delete {  (error) in
            // エラーが無ければ、ログイン画面へ戻る
            if error == nil {
                self.performSegue(withIdentifier: "GoToLoginScreen", sender: nil)
            }else{
                print("エラー:\(String(describing: error?.localizedDescription))")
            }
        }
    }

パスワードの再設定メール配信

パスワードを用いた認証機能には、パスワードを忘れてしまった場合に備えて、パスワードの変更機能が必要となります。
Firebase Authenticationでは、パスワードの再設定用のメール配信機能が使用出来ます。
実装は非常に簡単で以下の様に、送信先のメールアドレスを渡しながらメソッドを呼んであげるだけです。
パスワードを忘れてしまったらボタンをタップして、エラーが発生しなければ、指定したメールアドレスにパスワード再設定用のメールが自動で配信されます。

 @IBAction func forgotPasswordButtonTapped(_ sender: UIButton) {
        // 送信先のメールアドレスを取得
        let email = emailForm.text!
        // 取得したメールアドレスを引数に渡す
        Auth.auth().sendPasswordReset(withEmail: email) { (error) in
            if error == nil {
                // エラーが無ければ、パスワード再設定用のメールが指定したメールアドレスまで送信されます。
                // 届いたメールからパスワード再設定後、新しいパスワードでログインする事が出来る様になっています。
                self.performSegue(withIdentifier: "GoToLoginScreen", sender: nil)
            }else{
                print("エラー:\(String(describing: error?.localizedDescription))")
            }
        }
    }

配信されたパスワード再設定用のメール本文
こちらの本文にはパスワード再設定画面へのリンクが自動で貼り付けられています。

この本文内容はコンソール画面のテンプレート欄で自由に変更する事が出来ます。

メールのリンクを踏むと、下記の様にパスワードを再設定する事が可能です。
ここで新たに設定した後にアプリに戻ると、変更後のパスワードでログインする事が出来る様になっています。

さいごに

Firebase Authenticationには、痒い所に手が届く様なメソッドが用意されていて、非常に使いやすいですね。
他のFirebase機能も紹介していきたいと思います。

おすすめ書籍

Yossy

シェア
執筆者:
Yossy
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

4週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前