12
9

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 3 years have passed since last update.

FirebaseAuthで返ってくるエラーメッセージ

Posted at

#はじめに
FlutterFirebaseAuthを使ってユーザ認証を行うとき、自分が行っているエラーハンドリングについて解説します。

#環境

  • Flutter : 1.20.1
  • firebase_auth : 0.18.0+1

#コード

auth.dart
import 'package:firebase_auth/firebase_auth.dart';

class Auth {
  final _firebaseAuth = FirebaseAuth.instance;

  Future<String> createUser(String email, String password) async {
    try {
      final result = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );
      return result.user.uid;
    } catch (error) {
      if (error.toString() ==
          '[firebase_auth/invalid-email] The email address is badly formatted.') {
        return 'error:email';
      }
      if (error.toString() ==
          '[firebase_auth/email-already-in-use] The email address is already in use by another account.') {
        return 'error:exist';
      }
      print(error);
      return 'error:unknown';
    }
  }

  Future<String> signIn(String email, String password) async {
    try {
      final result = await _firebaseAuth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      return result.user.uid;
    } catch (error) {
      print(error);
      if (error.toString() ==
              '[firebase_auth/user-not-found] There is no user record corresponding to this identifier. The user may have been deleted.' ||
          error.toString() ==
              '[firebase_auth/invalid-email] The email address is badly formatted.') {
        return 'error:email';
      }
      if (error.toString() ==
          '[firebase_auth/wrong-password] The password is invalid or the user does not have a password.') {
        return 'error:password';
      }
      return 'error:unknown';
    }
  }

  Future<void> signOut() async {
    return _firebaseAuth.signOut();
  }
}

#kwsk(詳しく)
try-catchでエラー判定を行います。
(エラー文をあらかじめ把握しておき、それに応じたエラーメッセージを返す。)

##createUserWithEmailAndPasswordの場合

###[firebase_auth/invalid-email] The email address is badly formatted.

Authに渡したメールアドレスが、メールアドレスの形をしていない場合に出るエラーです。
(例:email : aaaaa)

###[firebase_auth/email-already-in-use] The email address is already in use by another account.

メールアドレスが既に登録済みである場合に出るエラーです。

##signInWithEmailAndPasswordの場合

###[firebase_auth/user-not-found] There is no user record corresponding to this identifier. The user may have been deleted.

登録されていないメールアドレスの場合に出るエラーです。

###[firebase_auth/invalid-email] The email address is badly formatted.
Authに渡したメールアドレスが、メールアドレスの形をしていない場合に出るエラーです。
(例:email : aaaaa)

###[firebase_auth/wrong-password] The password is invalid or the user does not have a password.

入力したパスワードが、登録したものと異なる場合に出るエラーです。

#ユーザーへのエラー表示
上の関数で返した値を判定して、関数終了時にDialogで認証が成功したか失敗したかを表示しています。

エラー文のcaseをいくつか持っているので、返却値がerror:unknownでない場合は理由も表示しています。

#おわり
FirebaseAuthを使うことでfirestoreへのユーザーデータ保存の管理がとてもやりやすくなるのでオススメです。(uidを取得してcollection名にするなど)

おわります。

12
9
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
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?