Firebase:每次都必须验证用户,它运行应用程序

Firebase: User has to be verificated every time, it runs the application

我正在开发一个 android 应用程序,目前我正在尝试使用 Firebase 实现身份验证功能。

功能正常运行,用户可以通过我期望的两种方式登录,但每次打开程序时,都必须通过身份验证程序。另外,点击注销按钮后,系统也会立即丢弃google-验证。 (避开之后,我们终于又回到了登录的菜单,但是这样很烦人)

public class FragmentMain extends Fragment {

private static final int MY_REQUEST_CODE = 7117;
List<AuthUI.IdpConfig> providers;
Button logout;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.main_fragment, container, false);

    logout = v.findViewById(R.id.logout);
    logout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AuthUI.getInstance()
                    .signOut(getActivity())
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            logout.setEnabled(false);
                            showSignOptions();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(getActivity(), "" + e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    });

    providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build()    
    );

    showSignOptions(); 
    return v;
}

private void showSignOptions() {
    startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .setLogo(R.drawable.loginlogo)
                    .setTheme(R.style.LogInTheme)
                    .build(), MY_REQUEST_CODE
    );
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == MY_REQUEST_CODE)
    {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        if(resultCode == RESULT_OK)
        {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

            Toast.makeText(getActivity(), "" + user.getEmail(), Toast.LENGTH_SHORT).show();
            logout.setEnabled(true);
        }else{
            Toast.makeText(getActivity(), "" + response.getError().getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}
}

在我看来 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser() 应该是导致问题的行,但不确定如何解决它(我的意思当然是,如果是问题所在...)

有什么方法可以阻止系统要求验证用户是否已经登录,只要它退出? - 当它注销时,回到登录意图?

你可以试试看;在启动器 activity 的 onStart() 方法中,您可以检查用户是否已登录。你可以这样做

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in, go to home activity/fragment.
} else {
    // No user is signed in, go to signin acitvity/fragment.
}