AndroidアプリケーションでFirebase認証を使用しており、Googleアカウント認証をオプションとして使用してアプリケーションにサインインしています。ユーザーがFirebaseで初めて認証されたかどうかを確認する
ユーザーが最初にアプリケーションにログインしているかどうかを確認するにはどうすればよいですか?
ご協力いただきありがとうございます。
AndroidアプリケーションでFirebase認証を使用しており、Googleアカウント認証をオプションとして使用してアプリケーションにサインインしています。ユーザーがFirebaseで初めて認証されたかどうかを確認する
ユーザーが最初にアプリケーションにログインしているかどうかを確認するにはどうすればよいですか?
ご協力いただきありがとうございます。
これは、あなたを助け、それを試してください:
Correct code location to check Firebase if a user has been created already?
初めてのユーザーのサインアップは、パスワードをリセットするために彼を頼むとき。 あなたが.. sendPasswordResetEmail方法でユーザーに リンクパスワードリセットのメールを送ることができますし、ユーザーパスワードのオプションをリセットし、新しい資格とパスワードとログインを変更し、ユーザーが間違ったメールIDを与えるならば、彼はできません取得をhttps://firebase.google.com/docs/auth/android/manage-users
をログイン..
ソリューションあなたはFirestoreと一緒Firebase認証を使用
Firestoreデータベースのルート・アーキテクチャは、この
ようになります。Firebase Auth currentUser.uid
を使用して、各ユーザのルートドキュメントを作成します。最初にユーザーが作成されるとすぐにregistered_at
というフィールドをルートドキュメントに追加し、ユースケースに応じて特定のコレクションをルートドキュメントに追加します。
ログインまたはサインインするときに、registered_at
フィールドの文書がすでに存在するかどうかを確認できます。それはまだ存在していない場合は、私は完全に最も正しい方法は、(与えられたことに同意しますが、あなたは
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.FirebaseFirestore
fun rootDocument(): DocumentReference? = rootPath()?.let {
return fireStore().document(it)
}
fun rootPath(): String? {
val loggedInUser = loggedInUser()
if (loggedInUser != null) {
return "users/${loggedInUser.uid}"
}
return null
}
fun fireStore() = FirebaseFirestore.getInstance()
fun createWriteBatch() = fireStore().batch()
fun loggedInUser() = fireAuth().currentUser
fun fireAuth(): FirebaseAuth = FirebaseAuth.getInstance()
fun afterSignIn() {
val rootDocument = rootDocument()
?: throw IllegalStateException("root document not found")
rootDocument.get().addOnCompleteListener {
val isNewUser = it.result.exists().not()
if (isNewUser) {
val batch = createWriteBatch()
batch.set(rootDocument, HashMap<Any, Any>().apply {
put("registered_at", System.currentTimeMillis())
})
batch.commit().addOnCompleteListener {
println("this is a new user")
}
} else {
println("this is not a new user")
}
}
}
(削除以降registered_at
フィールドを変更することはできませんユーザーを想定して)新しいユーザーとしてユーザーを扱うことができますauthユーザーテーブルに新しいフィールドを追加することができないということは、ユーザーの新しいパスを作成してそこに情報を格納することです。このチェックを行うためにログインした後で追加の要求をしたくありませんでした(Firestoreとリクエスト=お金)。
私はこの最初のログインチェックでuserNameのプロンプトを表示する必要がありました(表示名はFacebook/Googleから取得され、最初のログインであれば上書きするオプションを与えたいと思っていました)。私がやったことは、photoURLプロパティをフラグとして使用して初めてかどうかを判断することでした。理想的ではありませんが、要求を保存したい人は、これを回避策として使用できます。これは、我々はそれがで初めてのユーザがログインするのですかどうかを確認するにはAdditionalUserInfo.isNewUser()
https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AdditionalUserInfo
、 OnCompleteListener.onComplete
コールバックでAdditionalUserInfo.isNewUser()
メソッドを呼び出すだけです。
以下のコード例では、nullを確認してください。
OnCompleteListener<AuthResult> completeListener = new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
boolean isNew = task.getResult().getAdditionalUserInfo().isNewUser();
Log.d("MyTAG", "onComplete: " + (isNew ? "new user" : "old user"));
}
}
};
AdditionalUserInfo
クラスのリファレンス
https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AdditionalUserInfo
を使用することができ、バージョン11.6.0からFirebase用として大したことではないのですが、Firestoreのために、それはあなたの計画のためのより高価だ
だからFirebase認証を使用するすべてのユーザーのリストを取得使いたいですか? –
はいそれは私が探しているものです – rainman
残念ながら、Firebase Authはそのようには使用できません。 @NarenderReddyの説明に従わなければならないでしょう - ユーザーが初めてログインするたびに、Firebaseデータベース(または好みの保存方法)を使用して、追跡したい情報と共に何らかのエントリを保存する必要があります。その後、そのデータベースの場所を使用してすべてのユーザーのリストを取得できます。 –