Flutter:FirebaseAuthについてまとめる

#FirebaseAuthについてまとめる

FlutterのFirebaseAuthに関する情報が日本語であまり転がってなかったのでまとめようと思います。

FirebaseAuthのUser?についてもまとめたので、ぜひ、見に来てください。

https://qiita.com/Nekoyama141592/items/a0cebb06a3f7257ff6de

## createUserWithEmailAndPassword
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future createUser() async {
  final String email = 'email';
  final String password = 'password';
  try {
    await FirebaseAuth.instance
    .createUserWithEmailAndPassword(email: email, password: password);
  } on FirebaseAuthException catch(e) {
    final String errorCode = e.code;
    switch(errorCode) {
      case 'email-already-in-use':
      print('そのemailはもう使われています');
      break;
      case 'invalid-email':
      print('そのemailは相応しくありません');
      break;
      case 'operation-not-allowed':
      print('Firebaseでemail/passwordが有効ではありません');
      break;
      case 'weak-password':
      print('passwordが十分に強くないです');
      break;
    }
  }
}
```

###具体的な説明
```dart
Future<UserCredential>　createUserWithEmailAndPassword({required String email, required String password})
```

### 動作説明
指定されたメールアドレスとパスワードで、新しいユーザーアカウントの作成を試みます。

### エラーコード一覧
・email-already-in-use
・invalid-email
・operation-not-allowed
・weak-password

####email-already-in-use
指定されたEメールアドレスのアカウントがすでに存在する場合に投げられます。

####invalid-email
メールアドレスが有効でない場合に投げられます。

####operation-not-allowed
email/passwordアカウントが有効になっていない場合に投げられます。Firebase ConsoleのAuthタブで、email/passwordアカウントを有効にします。

####weak-password
パスワードが十分な強度を持たない場合に投げられます。

## signInWithEmailAndPassword
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signIn() async {
  final String email = 'email';
  final String password = 'password';
  try {
    await FirebaseAuth.instance
    .signInWithEmailAndPassword(email: email, password: password);
  } on FirebaseAuthException catch(e) {
    final String errorCode = e.code;
    switch(errorCode) {
      case 'invalid-email':
      print('そのemailは相応しくありません');
      break;
      case 'user-disabled':
      print('そのemailは無効化されています');
      break;
      case 'user-not-found':
      print('そのemailに対するユーザーが見つかりません');
      break;
      case 'wrong-password':
      print('passwordが違います');
      break;
      case 'too-many-requests';
      print('ログインの試行回数が制限を超えました。');
      break;
    }
  }
}
```

###具体的な説明
```dart
Future<UserCredential>　signInWithEmailAndPassword({required String email, required String password})
```

### 動作説明
与えられた電子メールアドレスとパスワードでユーザーのサインインを試みます。

成功した場合は、ユーザーをアプリにサインインさせ、[authStateChanges]、[idTokenChanges]、[userChanges]の各ストリームリスナーを更新します。

重要：FirebaseコンソールのAuthセクションでEmailとPasswordのアカウントを使用する前に有効にする必要があります。

### エラーコード一覧
・invalid-email
・user-disabled
・user-not-found
・wrong-password
・too-many-requests

####invalid-email
メールアドレスが有効でない場合に投げられます。

####user-disabled
指定されたEメールに対応するユーザーが無効化されている場合にスローされます。

####user-not-found
指定されたEメールに対応するユーザーがいない場合にスローされます。

####wrong-password
指定されたEメールに対してパスワードが無効であるか、Eメールに対応するアカウントにパスワードが設定されていない場合にスローされます。

####too-many-requests
ログインの試行回数が、制限を超えた場合にスローされます。

## signInAnonymously
```dart
Future signInAnonymously() async {
  try {
    
    await FirebaseAuth.instance.signInAnonymously();
  } on FirebaseAuthException catch(e) {
    final String errorCode = e.code;
    switch(errorCode) {
      case 'operation-not-allowed':
      print('Firebaseで匿名サインインが有効ではありません');
      break;
    }
  }
}
```

###具体的な説明
```dart
Future<UserCredential>signInAnonymously()
```

### 動作説明
非同期に匿名ユーザーを作成し、匿名ユーザーになります。

既にサインインしている匿名ユーザーがいる場合は、代わりにそのユーザーが返されます。他の既存のユーザーがサインインしている場合は、そのユーザーはサインアウトされます。

重要: 匿名アカウントを使用するには、FirebaseコンソールのAuthセクションで匿名アカウントを有効にする必要があります。
### エラーコード一覧
・operation-not-allowed
#### operation-not-allowed
匿名アカウントが有効になっていない場合にスローされます。FirebaseコンソールのAuthタブで、匿名アカウントを有効にします。

##　signOut
```dart
Future signOut() async {
  await FirebaseAuth.instance.signOut();
}
```

###具体的な説明
```dart
Future<void> signOut()
```

### 動作説明
現在のユーザーをサインアウトします。

成功すれば、[authStateChanges]、[idTokenChanges]、[userChanges]のストリームリスナーも更新されます。
### エラーコード一覧
なし

## sendPasswordResetEmail
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future sendPasswordResetEmail (context) async {
  String email = 'email';
  final instance = FirebaseAuth.instance;
  print(email);
  try{
    await instance.sendPasswordResetEmail(email: email);
    Navigator.pop(context);
  } on FirebaseAuthException catch(e) {
    print(e.toString());
    switch(e.code) {
      case 'auth/invalid-email':
      print('メールアドレスが有効ではありません');
      break;
      case 'auth/missing-android-pkg-name':
      print('メールアドレスが有効ではありません');
      break;
      case 'auth/missing-continue-uri':
      print('リクエストには、継続するURLが必要です');
      break;
      case 'auth/missing-ios-bundle-id':
      print('iOS Bundle IDを提供する必要があります');
      break;
      case 'auth/invalid-continue-uri':
      print('リクエストで指定された継続URLが無効です。');
      break;
      case 'auth/unauthorized-continue-uri':
      print('Firebaseコンソールでドメインをホワイトリストに登録してください');
      break;
      case 'auth/user-not-found':
      print('メールアドレスに対応するユーザーがいないです');
      break;
    } 
  } 
}
```

###具体的な説明
```dart
Future<void> sendPasswordResetEmail({required String email, ActionCodeSettings? actionCodeSettings})
```

### 動作説明
指定されたメールアドレスにパスワードリセットメールを送信します。
__ここからはコードをだいぶ省略します(ごめんなさい！)__

## applyActionCode
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future applyActionCode () async {
  String code = 'code';
  final instance = FirebaseAuth.instance;
  await instance.applyActionCode(code);
}
```

###具体的な説明
```dart
Future<void> applyActionCode(String code)
```

### 動作説明
電子メールやその他の帯域外のメカニズムによってユーザーに送信された検証コードを適用します。

### エラーコード一覧
・expired-action-code
・invalid-action-code
・user-disabled
・user-not-found
#### expired-action-code
アクションコードの有効期限が切れた場合にスローされます。
#### invalid-action-code
アクションコードが無効な場合にスローされます。これは、コードが不正であったり、すでに使用されている場合に起こります。

#### user-disabled
与えられたアクションコードに対応するユーザーが無効化された場合にスローされます。
#### user-not-found
アクションコードに対応するユーザーが存在しない場合にスローされます。これは、アクションコードが発行されてからこのメソッドが呼ばれるまでの間に、ユーザーが削除された場合に起こります。

## authStateChanges
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future authStateChanges () async {
  final instance = FirebaseAuth.instance;
  await instance.authStateChanges();
}
```

###具体的な説明
```dart
Stream<User?> authStateChanges()
```
### 動作説明
ユーザーのサインイン状態（サインインやサインアウトなど）の変更を通知する。

### エラーコード一覧
なし
####

## checkActionCode
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future checkActionCode () async {
  final String code = 'code';
  final instance = FirebaseAuth.instance;
  await instance.checkActionCode(code);
}
```

###具体的な説明
```dart
Future<ActionCodeInfo> checkActionCode(String code)
```

### 動作説明
電子メールやその他の帯域外のメカニズムでユーザーに送信された検証コードをチェックします。

そのコードに関する[ActionCodeInfo]を返します。

### エラーコード一覧
・expired-action-code
・invalid-action-code
・user-disabled
・user-not-found

#### expired-action-code
アクションコードの有効期限が切れた場合にスローされます。
#### invalid-action-code
アクションコードが無効な場合にスローされます。これは、コードが不正であったり、すでに使用されている場合に起こります。
#### user-disabled
与えられたアクションコードに対応するユーザーが無効化された場合にスローされます。

#### user-not-found
アクションコードに対応するユーザーが存在しない場合にスローされます。これは、アクションコードが発行されてからこのメソッドが呼ばれるまでの間に、ユーザーが削除された場合に起こります。

## confirmPasswordReset
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future confirmPasswordReset () async {
  final String code = 'code';
  final String newPassword = 'newPassword';
  final instance = FirebaseAuth.instance;
  await instance.confirmPasswordReset(code: code, newPassword: newPassword)
}
```

###具体的な説明
```dart
Future<void> confirmPasswordReset({required String code, required String newPassword})
```

### 動作説明
パスワードの再設定が完了し、確認コードと新しいパスワードが表示されます。
### エラーコード一覧
・expired-action-code
・invalid-action-code
・user-disabled
#### expired-action-code
アクションコードの有効期限が切れた場合にスローされます。
#### invalid-action-code
アクションコードが無効な場合にスローされます。これは、コードが不正であったり、すでに使用されている場合に起こります。
#### user-disabled
与えられたアクションコードに対応するユーザーが無効化された場合にスローされます。
#### user-not-found
アクションコードに対応するユーザーが存在しない場合にスローされます。これは、アクションコードが発行されてからこのメソッドが呼ばれるまでの間に、ユーザーが削除された場合に起こります。

#### weak-password
新しいパスワードが十分な強度を持っていない場合に投げられます。

## fetchSignInMethodsForEmail
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future fetchSignInMethodsForEmail () async {
  final String email = 'email';
  final instance = FirebaseAuth.instance;
  await instance.fetchSignInMethodsForEmail(email);
}
```

###具体的な説明
```dart
Future<List(String)> fetchSignInMethodsForEmail(String email)
```

### 動作説明
指定されたユーザ（メインの電子メールアドレスで識別される）のサインインに使用できるサインインメソッドのリストを返します。

このメソッドは、複数の認証メカニズムをサポートしている場合、Eメールファーストの認証フローを実装する場合に便利です。

ユーザが見つからなかった場合は、空のListが返されます。

### エラーコード一覧
・invalid-email
#### invalid-email
メールアドレスが有効でない場合にスローされます。

## getRedirectResult
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future getRedirectResult () async {
  final instance = FirebaseAuth.instance;
  await instance.getRedirectResult();
}
```

###具体的な説明
```dart
Future<UserCredential> getRedirectResult()
```

### 動作説明
リダイレクトベースのサインインフローからUserCredentialを返します。

サインインが成功した場合は、サインインしたユーザーを返します。サインインに失敗した場合は、エラーを表示します。リダイレクト操作が呼び出されなかった場合は、NULLのUserを持つ[UserCredential]を返します。

**このメソッドは、Webプラットフォームでのみサポートされています。**
### エラーコード一覧
なし

## idTokenChanges
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future idTokenChanges () async {
  final instance = FirebaseAuth.instance;
  await instance.idTokenChanges();
}
```

###具体的な説明
```dart
Stream<User?> idTokenChanges()
```

### 動作説明
ユーザーのサインイン状態の変更（サインインやサインアウトなど）や、トークンのリフレッシュイベントを通知します。

### エラーコード一覧
なし



### エラーコード一覧
・auth/invalid-email
・auth/missing-android-pkg-name
・auth/missing-continue-uri
・auth/missing-ios-bundle-id
・auth/invalid-continue-uri
・auth/unauthorized-continue-uri
・auth/user-not-found
#### auth/invalid-email
メールアドレスが有効でない場合にスローされます。
#### auth/missing-android-pkg-name
Androidアプリのインストールが必要な場合は、Androidパッケージ名を指定する必要があります。
#### auth/missing-continue-uri
リクエストには、継続するURLが必要です。
#### auth/missing-ios-bundle-id
App Store IDが提供されている場合は、iOS Bundle IDを提供する必要があります。
#### auth/invalid-continue-uri
リクエストで指定された継続URLが無効です。
#### auth/unauthorized-continue-uri
継続するURLのドメインがホワイトリストに登録されていません。Firebaseコンソールでドメインをホワイトリストに登録してください。
#### auth/user-not-found
メールアドレスに対応するユーザーがいない場合にスローされます。

## setLanguageCode
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future setLanguageCode () async {
  final String languageCode = 'languageCode';
  final instance = FirebaseAuth.instance;
  await instance.setLanguageCode(languageCode);
}
```

###具体的な説明
```dart
Future<void> setLanguageCode(String languageCode)
```

### 動作説明
nullに設定すると、デフォルトのFirebase Consoleの言語設定が適用されます。

この言語コードは、メールアクションテンプレート (パスワードリセット、メール検証、メール変更失効)、電話認証用SMSテンプレート、reCAPTCHA検証、OAuth popup/redirect操作にも適用されますが、指定されたプロバイダが指定された言語コードでのローカリゼーションをサポートしている場合に限ります。

ウェブプラットフォームでは、[languageCode] に null が指定された場合、Firebase プロジェクトのデフォルト言語が使用されます。ネイティブプラットフォームでは、デバイスの言語が使用されます。
### エラーコード一覧
なし

## setPersistence
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future setPersistence () async {
  // undefined persistence
  final instance = FirebaseAuth.instance;
  await instance.setPersistence(persistence)
}
```

###具体的な説明
```dart
Future<void> setPersistence(Persistence persistence)
```

### 動作説明
現在のAuthインスタンスで、現在保存されているAuthセッションに対する現在の永続性のタイプを変更し、このタイプの永続性を今後のサインイン要求（リダイレクト要求付きのサインインを含む）に適用します。

これは、あるタイプのストレージから別のタイプのストレージへの状態のコピーが完了した時点で解決するプロミスを返します。永続性を変更した後にsign-inメソッドを呼び出すと、永続性の変更が完了するのを待ってから新しいAuthステートに適用されます。

これにより、サインインするユーザーは、自分のセッションを記憶するかどうかを簡単に指定することができます。また、他のユーザーと共有するアプリケーションや機密データを持つアプリケーションでは、Authステートを永続化しないことも容易になります。

**この機能は、Webベースのプラットフォームでのみサポートされています。**
### エラーコード一覧
なし

## setSettings

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

Future setSettings () async {
  final instance = FirebaseAuth.instance;
  await instance.setSettings();
}
```

###具体的な説明
```dart
Future<void> setSettings({
  bool? appVerificationDisabledForTesting,
  String? userAccessGroup,
  String? phoneNumber,
  String? smsCode,
  bool? forceRecaptchaFlow,
})
```

### 動作説明
現在のインスタンスを指定された設定で更新します。

** [appVerificationDisabledForTesting] この設定は、iOS および Web プラットフォームにのみ適用されます。このプロパティをtrueに設定すると、電話認証のテストを目的としたアプリ検証が無効になります。**

このプロパティを有効にするには、reCAPTCHAのアプリ検証を処理する前に設定する必要があります。このプロパティを無効にすると、代わりにモックのreCAPTCHAがレンダリングされます。これは、開発中の手動テストや、自動化された統合テストの際に便利です。

この機能を使用するためには、Firebase Consoleから電話番号をホワイトリストに登録する必要があります。(https://firebase.google.com/docs/auth/web/phone-auth?authuser=0#test-with-whitelisted-phone-numbers)

デフォルト値はfalse（アプリ検証が有効）です。

[userAccessGroup] この設定は、iOSとMacOSのプラットフォームにのみ適用されます。設定すると、アプリケーション間で認証状態を共有することができます。プロパティにチームグループIDを設定するか、共有機能を削除する場合はNULLを設定します。

鍵の共有機能は、XCode（Project settings > Capabilities）でアプリに対して有効にする必要があります。詳細については、Appleのドキュメントを参照してください。(https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps)

### エラーコード一覧
なし

## signInWithCredential
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signInWithCredential () async {
  // undefined credential
  final instance = FirebaseAuth.instance;
  await instance.signInWithCredential(credential)
}
```

###具体的な説明
```dart
Future<UserCredential> signInWithCredential(AuthCredential credential)
```

### 動作説明
与えられたサードパーティの認証情報（FacebookログインのAccess Token、Google ID Token/Access Tokenのペアなど）を使ってFirebaseに非同期的にサインインし、追加のIDプロバイダデータを返します。

成功した場合は、ユーザーがアプリにサインインし、[authStateChanges]、[idTokenChanges]、[userChanges]などのストリームリスナーが更新されます。

ユーザーがまだアカウントを持っていない場合は、自動的にアカウントが作成されます。

重要：FirebaseコンソールのAuthセクションで、関連するアカウントを有効にしてから使用してください。

### エラーコード一覧
・account-exists-with-different-credential
・invalid-credential
・operation-not-allowed
・user-disabled
・user-not-found
・wrong-password
・invalid-verification-code
・invalid-verification-id
#### account-exists-with-different-credential
クレデンシャルによってアサートされた電子メールアドレスを持つアカウントがすでに存在する場合にスローされます。これを解決するには、[fetchSignInMethodsForEmail]を呼び出し、返されたプロバイダの1つを使用してサインインするようにユーザに依頼します。ユーザがサインインすると、[linkWithCredential]で元のクレデンシャルをユーザにリンクできます。

#### invalid-credential
クレデンシャルが不正であったり、期限切れであったりした場合にスローされます。

#### operation-not-allowed
クレデンシャルに対応するアカウントの種類が有効になっていない場合にスローされます。Firebase ConsoleのAuthタブでアカウントタイプを有効にしてください。

#### user-disabled
与えられたクレデンシャルに対応するユーザーが無効化されている場合にスローされます。

#### user-not-found
EmailAuthProvider.credential]のクレデンシャルでサインインしても、指定されたメールに対応するユーザーがいない場合にスローされます。

#### wrong-password
EmailAuthProvider.credential]のクレデンシャルを使用してサインインし、パスワードが与えられたメールに対して無効である場合、またはメールに対応するアカウントにパスワードが設定されていない場合にスローされます。

#### invalid-verification-code
クレデンシャルが[PhoneAuthProvider.credential]で、クレデンシャルの検証コードが有効でない場合にスローされます。
#### invalid-verification-id
クレデンシャルが[PhoneAuthProvider.credential]であり、クレデンシャルの検証IDが有効なidでない場合にスローされます。

## signInWithCustomToken
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signInWithCustomToken () async {
  final String token = 'token';
  final instance = FirebaseAuth.instance;
  await instance.signInWithCustomToken(token);
}
```

###具体的な説明
```dart
Future<UserCredential> signInWithCustomToken(String token)
```

### 動作説明
指定されたカスタムトークンでユーザーのサインインを試みます。

カスタムトークンは、Firebase Authを既存の認証システムと統合するために使用され、認証バックエンドによって生成される必要があります。

成功した場合は、ユーザーをアプリにサインインさせ、[authStateChanges]、[idTokenChanges]、[userChanges]の各ストリームリスナーを更新します。

トークンに指定された[uid]で識別されるユーザーがまだアカウントを持っていない場合は、自動的にアカウントが作成されます。

カスタムトークン認証の使用方法や便利なケースについては、ガイド(https://firebase.google.com/docs/auth/android/custom-auth)をご覧ください。

### エラーコード一覧
・custom-token-mismatch
・invalid-custom-token
#### custom-token-mismatch
カスタムトークンが別のFirebase Appのものである場合にスローされます。

#### invalid-custom-token
カスタムトークンのフォーマットが正しくない場合にスローされます。

## signInWithPopup
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signInWithPopup () async {
  // undefined provider
  final instance = FirebaseAuth.instance;
  await instance.signInWithPopup(provider);
}
```

###具体的な説明
```dart
Future<UserCredential> signInWithPopup(AuthProvider provider)
```

### 動作説明
ポップアップベースの OAuth 認証フローを使用して Firebase クライアントを認証します。

成功した場合は、サインインしたユーザとプロバイダのクレデンシャルを返します。

**このメソッドはウェブベースのプラットフォームでのみ利用可能です。**
### エラーコード一覧
なし

## signInWithRedirect
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signInWithRedirect () async {
  // undefined provider
  final instance = FirebaseAuth.instance;
  await instance.signInWithRedirect(provider);
}
```

###具体的な説明
```dart
Future<void>signInWithRedirect(AuthProvider provider)
```

### 動作説明
フルページのリダイレクトフローを使用して、Firebaseクライアントを認証します。

この操作の結果やエラーを処理するには、[getRedirectResult]を参照してください。

### エラーコード一覧
なし

## verifyPasswordResetCode
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future verifyPasswordResetCode () async {
  final code = '';
  final instance = FirebaseAuth.instance;
  await instance.verifyPasswordResetCode(code);
}
```

###具体的な説明
```dart
Future<String> verifyPasswordResetCode(String code)
```

### 動作説明
電子メールまたはその他の帯域外のメカニズムによってユーザーに送信されたパスワードリセットコードをチェックします。

有効であれば、ユーザーのメールアドレスを返します。
### エラーコード一覧
・expired-action-code
・invalid-action-code
・user-disabled
・user-not-found
#### expired-action-code
パスワードリセットコードの有効期限が切れた場合にスローされる

#### invalid-action-code
パスワードリセットコードが無効な場合にスローされます。これは、コードが不正であったり、すでに使用されていたりする場合に起こります。

#### user-disabled
指定されたEメールに対応するユーザーが無効化されている場合にスローされます。

#### user-not-found
パスワードリセットコードに対応するユーザーがいない場合にスローされます。これは、コードが発行されてからこのメソッドが呼ばれるまでの間にユーザーが削除された場合に起こります。

## verifyPhoneNumber

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

Future verifyPhoneNumber () async {
  final phoneNumber = '090-xxxx-xxxx';
  // verificationCompleted,
  // verificationFailed,
  // codeSent,
  // codeAutoRetrievalTimeout,
  // are not defined
  final instance = FirebaseAuth.instance;
  await instance.verifyPhoneNumber(
    phoneNumber: phoneNumber, 
    verificationCompleted: verificationCompleted, 
    verificationFailed: verificationFailed, 
    codeSent: codeSent, 
    codeAutoRetrievalTimeout: codeAutoRetrievalTimeout
  );
}
```

###具体的な説明
```dart
Future<void> verifyPhoneNumber({
  required String phoneNumber,
  required void Function(PhoneAuthCredential) verificationCompleted,
  required void Function(FirebaseAuthException) verificationFailed,
  required void Function(String, int?) codeSent,
  required void Function(String) codeAutoRetrievalTimeout,
  String? autoRetrievedSmsCodeForTesting,
  Duration timeout = const Duration(seconds: 30),
  int? forceResendingToken,
})
```

### 動作説明
指定された電話番号に対する電話番号認証プロセスを開始します。

このメソッドは、ユーザーが提供した電話番号がユーザーのものであるかどうかを確認するために使用します。FirebaseはSMSメッセージでコードを電話番号に送信し、ユーザーにコードの入力を促す必要があります。このコードと検証 ID を組み合わせて [PhoneAuthProvider.credential] を作成し、これを使ってユーザーのサインインやアカウントへのリンクを行うことができます ([signInWithCredential] や [linkWithCredential] を参照)。

一部のAndroid端末では、自動認証を端末側で行うことができ、[PhoneAuthCredential]が自動的に提供されます。

forceResendingToken]が提供されない限り、重複してSMSが送信されることはありません。

[phoneNumber] ユーザーがサインアップまたはサインインするアカウントの電話番号です。国番号の前にプラス記号('+')を付けた電話番号を必ず入力してください。

[timeout] ライブラリがSMSの自動取得を完了するまで待つことができる最大時間。最大許容値は2分です。

[forceResendingToken] [codeSent]コールバックから取得した[forceResendingToken]により、自動取得のタイムアウト前に強制的に別の検証用SMSを再送信します。

[verificationCompleted] SMSが自動取得されたとき、または電話番号が瞬時に検証されたときにトリガーされます。コールバックは[PhoneAuthCredential]を受け取り、[signInWithCredential]や[linkWithCredential]に渡すことができます。

[verificationFailed] 電話番号認証時にエラーが発生した場合にトリガーされます。このトリガーには [FirebaseAuthException] が発生します。

[codeSent] ユーザーの携帯電話にSMSが送信されたときにトリガーされ、[verificationId]と[forceResendingToken]が含まれます。

[codeAutoRetrievalTimeout] SMSの自動取得がタイムアウトした場合にトリガーされ、[verificationId]が提供されます。

### エラーコード一覧
なし


## isSignInWithEmailLink

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

Future isSignInWithEmailLink () async {
  final String emailLink = "emailLink";
  final instance = FirebaseAuth.instance;
  return instance.isSignInWithEmailLink(emailLink);
}
```

###具体的な説明
```dart
bool isSignInWithEmailLink(String emailLink)
```

### 動作説明
入力されたリンクが電子メールによるサインインのリンクであるかどうかをチェックします。

### エラーコード一覧
なし

## signInWithEmailLink
```dart
import 'package:firebase_auth/firebase_auth.dart';

Future signInWithEmailLink () async {
  final String emailLink = "emailLink";
  final String email = 'email';
  final instance = FirebaseAuth.instance;
  return instance.signInWithEmailLink(email: email, emailLink: emailLink);
}
```

###具体的な説明
```dart
Future<UserCredential> signInWithEmailLink({required String email, required String emailLink})
```

### 動作説明
電子メールアドレスと電子メールのサインインリンクを使ってサインインします。

メールアドレスが無効な場合や、メールリンクのOTPが期限切れの場合は、エラーになります。

このメソッドを呼び出す前に、[isSignInWithEmailLink]を使用して、リンクがサインイン用のメールリンクであることを確認してください。
### エラーコード一覧
・expired-action-code
#### expired-action-code
メールリンクのOTPが期限切れになった場合にスローされます。

####invalid-email
メールアドレスが有効でない場合に投げられます。

####user-disabled
指定されたEメールに対応するユーザーが無効化されている場合にスローされます。