はじめに
FlutterでFirebase
のauthentication
を使ってログインや新規登録の処理をしていた時に、
参考にした記事等が少し古いこともあり、ログインや新規登録のエラー処理に少し苦戦しました。
その後、自分が実装したい範囲まではできたので共有したいと思います。
今回使う、例外処理の基本
try{
ログインする
}
catch(e){
print(e); //エラー内容が出力
//出力例) パスワードが間違っています
}
Dartにおける例外処理の基本が上記のtry-catch文
です。
try
で実行された処理にエラーが発生した際に、catch
で指定した処理が実行されます。
引数のe
でtry
が失敗したときのエラーを受け取ることができます。
FirebaseAuthからのエラーをキャッチする
onPressed: () async {
try {
await _auth.createUserWithEmailAndPassword(
email: email, password: password); //ユーザーの新規登録を行う処理
}
on FirebaseAuthException catch (e) { //FirebaseAuthExceptionからのエラーをeに格納する
print(e);
}
}
上のコードはFirebaseAuthException
つまりfirebase_auth
で出るエラーだけをキャッチします。
具体的にはどんな処理を書けばいいのか
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のドキュメントから確認できます。
上記のコードはメールアドレスとパスワードを使って新規登録
する際の例になります。こちらを参考にしました。
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