Flutter:FirebaseAuthのUser?についてまとめる

#Flutter:FirebaseAuthのUser?についてまとめる

FirebaseAuthについてもまとめたので、よければ見てください！

https://qiita.com/Nekoyama141592/items/90f410e071bf60944c86

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

Future reload ()  {
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.reload();
}
```
###具体的な説明
```dart
Future<void> reload()
```
### 動作説明
もし、サインインしているなら、現在のユーザーをリフレッシュします。
### エラーコード一覧
なし

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

Future sendEmailVerification () async {
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.sendEmailVerification();
}
```
###具体的な説明
```dart
Future<void> sendEmailVerification([ActionCodeSettings? actionCodeSettings])
```
### 動作説明
ユーザーに検証メールを送信する。

applyActionCode]を呼び出すことで、検証処理が完了します。
### エラーコード一覧
なし

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

Future unlink() async {
  // undefined providerId
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.unlink(providerId);
}
```
###具体的な説明
```dart
Future<User> unlink(String providerId)

```
### 動作説明
ユーザーアカウントとプロバイダーの連携を解除する。
### エラーコード一覧
・no-such-provider
#### no-such-provider
ユーザがこのプロバイダをリンクしていない場合、または指定されたプロバイダIDが存在しない場合にスローされます。

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

Future verifyBeforeUpdateEmail() async {
  final String newEmail = 'newEmail'
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.verifyBeforeUpdateEmail(newEmail);
}
```
###具体的な説明
```dart
Future<void> verifyBeforeUpdateEmail(String newEmail, [ActionCodeSettings? actionCodeSettings])
```
### 動作説明
新しいメールアドレスに認証メールを送信します。検証を受けたユーザーのメールは、新しいものに更新されます。

カスタムのEメールアクションハンドラーをお持ちの場合は、[applyActionCode]を呼び出すことで、検証処理を完了させることができます。

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

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

Future updateDisplayName() async {
  final String displayName = 'displayName';
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.updateDisplayName(displayName);
}
```
###具体的な説明
```dart
Future<void> updateDisplayName(String? displayName)

```
### 動作説明
displayNameをupdateします。
### エラーコード一覧
なし

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

Future updateEmail() async {
  final String newEmail = 'newEmail';
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.updateEmail(newEmail);
}
```
###具体的な説明
```dart
Future<void> updateEmail(String newEmail)
```
### 動作説明
ユーザーの電子メールアドレスを更新します。

元のメールアドレス（設定されている場合）には、アカウントの乗っ取りから保護するために、メールアドレスの変更を取り消すことができるメールが送信されます。

重要：この操作にはセキュリティ上の制約があり、ユーザーが最近サインインしたことが必要です。この要件が満たされていない場合は、ユーザーに再度認証を求め、[User.reauthenticateWithCredential]を呼び出してください。

### エラーコード一覧
・invalid-email
・email-already-in-use
・requires-recent-login
#### invalid-email
使用されたメールが無効な場合にスローされます。
#### email-already-in-use
メールがすでに他のユーザーによって使用されている場合にスローされます。

#### requires-recent-login
ユーザーの最後のサインイン時間がセキュリティのしきい値を満たしていない場合に発生します。解決するには、[User.reauthenticateWithCredential]を使用します。ユーザーが匿名の場合は適用されません。

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

Future updatePassword() async {
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  try {
    await user!.updatePassword(newPassword);
  } on FirebaseAuthException catch(e) {
    switch(e.code) {
      case 'weak-password':
      print('パスワードの強度が十分ではありません');
      break;
      case 'requires-recent-login':
      print('再認証が行われていません');
      break;
    }
  }
}
```
###具体的な説明
```dart
Future<void> updatePassword(String newPassword)
```
### 動作説明
ユーザーのパスワードを更新します。

重要：これはセキュリティ上重要な操作であり、ユーザーが最近サインインしたことを必要とします。この要件が満たされていない場合は、ユーザーに再度認証を依頼し、[User.reauthenticateWithCredential]を呼び出してください。

### エラーコード一覧
・weak-password
・requires-recent-login
#### weak-password
パスワードの強度が十分でない場合にスローされます。
#### requires-recent-login
ユーザーの最終ログイン時刻がセキュリティのしきい値を満たしていない場合にスローされます。解決するには、[User.reauthenticateWithCredential]を使用してください。ユーザーが匿名の場合は適用されません。

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

Future updatePhoneNumber() async {
  // undefined phoneCredential
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.updatePhoneNumber(phoneCredential);
}
```
###具体的な説明
```dart
Future<void> updatePhoneNumber(PhoneAuthCredential phoneCredential)
```
### 動作説明
ユーザーの電話番号を更新します。

クレデンシャルは、[verifyPhoneNumber]で電話番号を検証することで作成できます。

### エラーコード一覧
・invalid-verification-code
・invalid-verification-id
#### invalid-verification-code
クレデンシャルの検証コードが有効でない場合にスローされます。
#### invalid-verification-id
クレデンシャルの検証IDが有効でない場合にスローされます。

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

Future updatePhoneNumber() async {
  final String photoURL = 'photoURL';
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.updatePhotoURL(photoURL);
}
```
###具体的な説明
```dart
Future<void> updatePhotoURL(String? photoURL)
```
### 動作説明
プロフィール写真をupdateする
### エラーコード一覧
なし
## delete()

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

Future delete()  {
  final instance = FirebaseAuth.instance;
  User? user = instance.currentUser;
  await user!.delete();
}

```
###具体的な情報

```dart
Future<void> delete()
```

###動作説明
ユーザーを削除し、サインアウトします。

**重要：この操作はセキュリティ上の制約があり、ユーザーが最近サインインしたことが必要です。この要件が満たされていない場合は、ユーザーに再度認証を求め、[User.reauthenticateWithCredential]を呼び出してください。**

###エラーコード
requires-recent-login

#### requires-recent-login
ユーザーの最終ログイン時刻がセキュリティのしきい値を満たしていない場合にスローされます。解決するには、[User.reauthenticateWithCredential]を使用してください。ユーザーが匿名の場合は適用されません。

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

Future reauthenticateWithCredential ()  async {
  final credential = EmailAuthProvider.credential(email: email, password: password)
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  try {
    await user!.reauthenticateWithCredential(credential);
  } on FirebaseAuthException catch(e) {
    switch(e.code) {
      case 'user-mismatch':
      print('それは今、お使いのアカウントではありません');
      break;
      case 'user-not-found':
      print('そのようなユーザーは見つかりません');
      break;
      case 'invalid-email':
      print('そのメールアドレスは運営によって無効化されています');
      break;
      case 'invalid-credential':
      print('invalid-credential');
      break;
      case 'wrong-password':
      print('passwordが違います');
      break;
    }
  }
}
```
###具体的な説明
```dart
Future<UserCredential> reauthenticateWithCredential(AuthCredential credential)
```
### 動作説明
新しいクレデンシャルを使用してユーザーを再認証します。

User.updatePassword]など、最近サインインしたときのトークンを必要とする操作の前に使用します。

### エラーコード一覧
・user-mismatch
・user-not-found
・invalid-credential
・invalid-email
・wrong-password
・invalid-verification-code
#### user-mismatch
与えられたクレデンシャルがユーザーに対応していない場合にスローされます。
#### user-not-found
与えられたクレデンシャルが既存のユーザーに対応していない場合にスローされます。
#### invalid-credential
プロバイダのクレデンシャルが有効でない場合にスローされます。これは、linkを呼び出したときにすでに期限切れになっていた場合や、無効なトークンを使用していた場合に起こります。お使いのプロバイダのFirebaseドキュメントを参照し、credentialメソッドに正しいパラメータを渡してください。
#### invalid-email
EmailAuthProvider.credential]で使用されているメールが無効な場合にスローされます。
#### wrong-password
EmailAuthProvider.credential]で使用されているパスワードが正しくない場合や、メールに関連付けられているユーザーがパスワードを持っていない場合にスローされます。
#### invalid-verification-code
クレデンシャルが[PhoneAuthProvider.credential]で、クレデンシャルの検証コードが有効でない場合にスローされます。
#### invalid-verification-id
クレデンシャルが[PhoneAuthProvider.credential]で、クレデンシャルの検証IDが有効でない場合にスローされます。

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

Future getIdToken ()  {
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.getIdToken();
}
```
###具体的な説明
```dart
Future<String> getIdToken([bool forceRefresh = false])
```
### 動作説明
Firebase サービスへのユーザの識別に使用される JSON Web Token (JWT) を返します。

有効期限が切れていなければ、現在のトークンを返します。そうでない場合は、トークンを更新して新しいものを返します。

forceRefresh]がtrueの場合、トークンの有効期限に関わらず、返されるトークンはリフレッシュされます。

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

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

Future getIdTokenResult ()  {
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.getIdTokenResult();
}
```
###具体的な説明
```dart
Future<IdTokenResult> getIdTokenResult([bool forceRefresh = false])
```
### 動作説明
ユーザーの JSON Web Token (JWT) とその他のメタデータを含む [IdTokenResult] を返します。

forceRefresh]がtrueの場合、トークンの有効期限に関わらず、返されるトークンはリフレッシュされます。
### エラーコード一覧
なし

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

Future linkWithCredential ()  {
  // undefined credential
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.linkWithCredential(credential)
}
```
###具体的な説明
```dart
Future<UserCredential> linkWithCredential(AuthCredential credential)
```
### 動作説明
指定された認証情報を持つユーザーアカウントをリンクします。
### エラーコード一覧
・provider-already-linked
・invalid-credential
・credential-already-in-use
・email-already-in-use
・operation-not-allowed
・invalid-email
・invalid-verification-code
####
#### provider-already-linked
プロバイダがすでにユーザにリンクされている場合にスローされます。このエラーは、現在ユーザーにリンクされているプロバイダーのアカウントと同じでなくてもスローされます。
#### invalid-credential
プロバイダのクレデンシャルが有効でない場合にスローされます。これは、linkを呼び出したときにすでに期限切れになっていた場合や、無効なトークンを使用していた場合に起こります。お使いのプロバイダのFirebaseドキュメントを参照し、credentialメソッドに正しいパラメータを渡してください。
#### credential-already-in-use
クレデンシャルに対応するアカウントがすでにユーザーの中に存在しているか、Firebaseユーザーにすでにリンクされている場合にスローされます。

 例えば、匿名ユーザーをGoogleクレデンシャルにリンクしてGoogleユーザーにアップグレードする際に、使用したGoogleクレデンシャルが既に既存のFirebase Googleユーザーに関連付けられている場合に、このエラーがスローされます。

クレデンシャルの種類によっては、email、phoneNumber、credential ([AuthCredential])の各フィールドが提供される場合があります。このエラーから回復するには、[signInWithCredential]で直接クレデンシャルを使ってサインインします。PhoneAuthCredential]を使用してプロバイダーをアカウントにリンクさせている場合は、このエラーから回復できませんのでご注意ください。

 アカウントのリンクを試みると、ユーザーのサインインに新しいSMSコードが必要になります。

#### email-already-in-use
クレデンシャルに対応する電子メールがユーザの中に既に存在する場合に投げられます。

クレデンシャルを既存のユーザにリンクしているときにスローされた場合は、電子メールとクレデンシャル ([AuthCredential]) のフィールドも提供されます。

そのクレデンシャルを使ってサインインを続けたい場合は、その電子メールを使ってクレデンシャルを既存のユーザにリンクさせる必要があります。

これを行うには、[fetchSignInMethodsForEmail]を呼び出し、返されたプロバイダの1つを使ってメールにサインインし、[User.linkWithCredential]でオリジナルのクレデンシャルを新しくサインインしたユーザに渡します。

#### operation-not-allowed
Firebase Consoleでプロバイダを有効にしていない場合にスローされます。プロジェクトのFirebaseコンソールで、AuthセクションとSign in Methodタブで、プロバイダを設定します。

#### invalid-email
EmailAuthProvider.credential]で使用されているメールが無効な場合にスローされます。
#### wrong-password
EmailAuthProvider.credential]で使用されているパスワードが正しくない場合や、メールに関連付けられているユーザーがパスワードを持っていない場合にスローされます。
#### invalid-verification-code
クレデンシャルが[PhoneAuthProvider.credential]で、クレデンシャルの検証コードが有効でない場合にスローされます。
#### invalid-verification-id
クレデンシャルが[PhoneAuthProvider.credential]で、クレデンシャルの検証IDが有効でない場合にスローされます。

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

Future linkWithPhoneNumber ()  {
  // undefined credential
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  user!.linkWithPhoneNumber(phoneNumber);
}
```
###具体的な説明
```dart
Future<ConfirmationResult> linkWithPhoneNumber(String phoneNumber, [RecaptchaVerifier? verifier])
```
### 動作説明
ユーザーアカウントと指定された電話番号をリンクします。

**このメソッドは、Webプラットフォームでのみサポートされています。これらのプラットフォームでは、[verifyPhoneNumber]、[linkWithCredential]の順に使用してください。**
### エラーコード一覧
・provider-already-linked
・captcha-check-failed
・invalid-phone-number
・quota-exceeded
・user-disabled
・credential-already-in-use
・operation-not-allowed
#### provider-already-linked
プロバイダがすでにユーザにリンクされている場合にスローされます。このエラーは、現在ユーザーにリンクされているプロバイダーのアカウントと同じでなくてもスローされます。
#### captcha-check-failed
reCAPTCHAのレスポンストークンが無効であったり、期限切れであったり、このメソッドがホワイトリストに載っていないドメインから呼び出された場合にスローされます。
#### invalid-phone-number
電話番号のフォーマットが無効な場合にスローされます。

#### quota-exceeded
FirebaseプロジェクトのSMSクォータを超えた場合にスローされます。
#### user-disabled
与えられた電話番号に対応するユーザーが無効化されている場合にスローされます。
#### credential-already-in-use
電話番号に対応するアカウントがすでにユーザーの中に存在しているか、Firebase Userにリンクされている場合にスローされます。
#### operation-not-allowed
Firebase Consoleで電話認証プロバイダを有効にしていない場合にスローされます。プロジェクトのFirebase Consoleで、AuthセクションとSign in Methodタブで、プロバイダを設定します。

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

Future linkWithPopup ()  {
  // undefined provider
  final instance = FirebaseAuth.instance;
  final User? user = instance.currentUser;
  await user!.linkWithPopup(provider);
}
```
###具体的な説明
```dart
Future<UserCredential> linkWithPopup(AuthProvider provider)
```
### 動作説明
ユーザアカウントを指定されたプロバイダとリンクさせます。
### エラーコード一覧
・provider-already-linked
・invalid-credential
・credential-already-in-use
・email-already-in-use
・operation-not-allowed
#### provider-already-linked
プロバイダがすでにユーザにリンクされている場合にスローされます。このエラーは、現在ユーザーにリンクされているプロバイダーのアカウントと同じでなくてもスローされます。
#### invalid-credential
プロバイダのクレデンシャルが有効でない場合にスローされます。これは、linkを呼び出したときにすでに期限切れになっていた場合や、無効なトークンを使用していた場合に起こります。お使いのプロバイダのFirebaseドキュメントを参照し、credentialメソッドに正しいパラメータを渡してください。
#### credential-already-in-use
クレデンシャルに対応するアカウントがすでにユーザーの中に存在しているか、Firebaseユーザーにすでにリンクされている場合にスローされます。

 例えば、匿名ユーザーをGoogleクレデンシャルにリンクしてGoogleユーザーにアップグレードする際に、使用したGoogleクレデンシャルが既に既存のFirebase Googleユーザーに関連付けられている場合に、このエラーがスローされます。

クレデンシャルの種類によっては、email、phoneNumber、credential ([AuthCredential])の各フィールドが提供される場合があります。

このエラーから回復するには、[signInWithCredential]で直接クレデンシャルを使ってサインインします。
#### email-already-in-use
クレデンシャルに対応する電子メールがユーザの中に既に存在する場合に投げられます。

 クレデンシャルを既存のユーザにリンクしているときにスローされた場合は、電子メールとクレデンシャル ([AuthCredential]) のフィールドも提供されます。

そのクレデンシャルを使ってサインインを続けたい場合は、その電子メールを使ってクレデンシャルを既存のユーザにリンクさせる必要があります。

 これを行うには、[fetchSignInMethodsForEmail]を呼び出し、返されたプロバイダの1つを使ってメールにサインインし、[User.linkWithCredential]でオリジナルのクレデンシャルを新しくサインインしたユーザに渡します。

#### operation-not-allowed
Firebase Consoleでプロバイダを有効にしていない場合にスローされます。プロジェクトのFirebaseコンソールで、AuthセクションとSign in Methodタブで、プロバイダを設定します。