4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter × Firebase】 Firebase authで発生するエラーをキャッチする方法(エラーハンドリング)

Last updated at Posted at 2022-04-06

はじめに

FlutterでFirebaseauthenticationを使ってログインや新規登録の処理をしていた時に、
参考にした記事等が少し古いこともあり、ログインや新規登録のエラー処理に少し苦戦しました。
その後、自分が実装したい範囲まではできたので共有したいと思います。

今回使う、例外処理の基本

    try{
      ログインする
    }
    catch(e){
      print(e); //エラー内容が出力
      //出力例) パスワードが間違っています
    }

Dartにおける例外処理の基本が上記のtry-catch文です。
tryで実行された処理にエラーが発生した際に、catchで指定した処理が実行されます。
引数のetryが失敗したときのエラーを受け取ることができます。

FirebaseAuthからのエラーをキャッチする

   onPressed: () async {
     try {
       await _auth.createUserWithEmailAndPassword(
            email: email, password: password); //ユーザーの新規登録を行う処理
     } 
     on FirebaseAuthException catch (e) { //FirebaseAuthExceptionからのエラーをeに格納する
       print(e);
     }
   }

上のコードはFirebaseAuthExceptionつまりfirebase_authで出るエラーだけをキャッチします。

具体的にはどんな処理を書けばいいのか

新規登録.dart
   onPressed: () async {
     try {
       final newUser = await _auth.createUserWithEmailAndPassword(
            email: email, password: password); //ユーザーを新規登録する処理
     } on FirebaseAuthException catch (e) {
       if (e.code == 'email-already-in-use') {
         print('指定したメールアドレスは登録済みです');
       } else if (e.code == 'invalid-email') {
         print('メールアドレスのフォーマットが正しくありません');
       } else if (e.code == 'operation-not-allowed') {
         print('指定したメールアドレス・パスワードは現在使用できません');
       } else if (e.code == 'weak-password') {
         print('パスワードは6文字以上にしてください');
       }
     }
   }

on FirebaseAuthExceptionを指定しておけばe.codeで発生したエラーコード(エラーの中身)を取得できて、
エラー別に実行する処理を指定できます。
FirebaseAuthExceptionによって起こる可能性があるエラーコードはfirebase_authのドキュメントから確認できます。
上記のコードはメールアドレスとパスワードを使って新規登録する際の例になります。こちらを参考にしました。

ログイン.dart
   onPressed: () async {
     try {
       final newUser = await _auth.createUserWithEmailAndPassword(
            email: email, password: password); //ユーザーを新規登録する処理
     } on FirebaseAuthException catch (e) {
       if (e.code == 'user-disabled') {
         print('そのメールアドレスは利用できません');
       } else if (e.code == 'invalid-email') {
         print('メールアドレスのフォーマットが正しくありません');
       } else if (e.code == 'user-not-found') {
         print('ユーザーが見つかりません');
       } else if (e.code == 'wrong-password') {
         print('パスワードが違います');
       }
     }
   }

上記はメールアドレスとパスワードを使ってログインの処理を書く場合の例になります。こちらを参考にしました。

最後に

もし参考になったらいいねしてくれたら嬉しいです!
今回参考にしたサイト等
https://flutternyumon.com/how-to-use-exception/
https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/createUserWithEmailAndPassword.html
https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/signInWithEmailAndPassword.html

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?