web-dev-qa-db-ja.com

Firebase:ユーザーがログインしているかどうかを確認する方法は?

Android Firebase;への新しい蜂Firebase Authenticationを試しています。ユーザーがログインしているかどうかを確認しようとしています。次の簡単なコードを使用しています。

_null != mAuth.getCurrentUser();
_

そして、これはtrueを返しますが、ログインしませんでしたが、匿名ログインを有効にしました。 check mAuth.getCurrentUser().isAnonymous()falseを取得しています。

IDEでmAuth.getCurrentUser()を調べると、これが示されます: enter image description here

ここの方向。

16
dsharew

同様の問題が発生しましたが、Firebaseからのサインアウトだけでは不十分であり、再度自動的にサインインします。

GoogleSignInApiを使用してサインアウトする必要もあります。

firebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(apiClient);
15
ataulm

私はそれが次のように働くと思う:

FirebaseAuth.getInstance().getCurrentUser()

ユーザーがログインしていない場合は、nullを返す必要があります。

17
Ashiq Muhammed

ユーザーがログインしているかどうかを確認するには:

 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に設定します。

4
RileyManda

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()
            }
        }
    }
0
Oscar