Android Firebase;への新しい蜂Firebase Authenticationを試しています。ユーザーがログインしているかどうかを確認しようとしています。次の簡単なコードを使用しています。
_null != mAuth.getCurrentUser();
_
そして、これはtrue
を返しますが、ログインしませんでしたが、匿名ログインを有効にしました。 check mAuth.getCurrentUser().isAnonymous()
false
を取得しています。
IDEでmAuth.getCurrentUser()
を調べると、これが示されます:
ここの方向。
同様の問題が発生しましたが、Firebaseからのサインアウトだけでは不十分であり、再度自動的にサインインします。
GoogleSignInApiを使用してサインアウトする必要もあります。
firebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(apiClient);
私はそれが次のように働くと思う:
FirebaseAuth.getInstance().getCurrentUser()
ユーザーがログインしていない場合は、null
を返す必要があります。
ユーザーがログインしているかどうかを確認するには:
private FirebaseAuth firebaseAuth;
FirebaseAuth.AuthStateListener mAuthListener;
次に、onCreateで:
firebaseAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener(){
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user!=null){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
};
これは、認証状態クラスまたはインターフェースで作成できます。その後、単に認証状態を呼び出すか、チェックインしたいアクティビティをチェックインできます。
アクティビティの実行中に認証状態を確認する:
@Override
protected void onStart() {
super.onStart();
firebaseAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onResume() {
super.onResume();
firebaseAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onStop() {
super.onStop();
firebaseAuth.removeAuthStateListener(mAuthListener);
}
ログインについて:ブール値を設定して、ユーザーがログイン状態であることを確認した後:(デフォルトのブール値をfalseに設定)
firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (!task.isSuccessful()) {
//set a your boolean to false
current_user_db.setValue(false);
ユーザーが正常にログインした場合は、trueに設定し、その後にインテントを設定します。
else {
String userid = firebaseAuth.getCurrentUser().getUid();
DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference("Users").child(userid);
current_user_db.setValue(true);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
ユーザーがログインしている場合はノードをFalseに設定し、ユーザーが正常にログインしていない場合はfalseに設定します。
Kotlinバージョン
kotlinを使用する場合は、次のようにします。
//properties
var firebaseAuth: FirebaseAuth? = null
var mAuthListener: FirebaseAuth.AuthStateListener? = null
//in onCreate function
firebaseAuth = FirebaseAuth.getInstance()
mAuthListener = FirebaseAuth.AuthStateListener() {
fun onAuthStateChanged(@NonNull firebaseAuth:FirebaseAuth) {
val user = FirebaseAuth.getInstance().getCurrentUser()
if (user != null)
{
val intent = Intent(this@LoginActivity, MainActivity::class.Java)
startActivity(intent)
finish()
}
}
}