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.
}
我正在开发一个 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.
}