gpt4 book ai didi

firebase - 如何在 Firebase Auth UI 注销后禁用密码自动登录请求的智能锁?

转载 作者:行者123 更新时间:2023-12-02 18:55:52 24 4
gpt4 key购买 nike

我正在构建一个单一 Activity Android 应用程序,试图遵循 Google 的建议。我使用 FirebaseAuth UI 进行身份验证,显然使用“密码智能锁”将凭据保存到您的谷歌帐户中。我的注销功能如下所示:

private fun signOutUser(){
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener {
Timber.i("Sign out completed")
}
sharedViewModel.setUser(null)
}

但是,注销完成后,UI 会立即启动用户登录过程,使用 Smart Lock for Passwords 意味着会弹出一个对话框。这会阻止用户选择另一个帐户。在 FirebaseAuth UI 的 github 帐户中,Google 提到了这个问题:

"Smart Lock for Passwords must be instructed to disable automatic sign-in, in order to prevent an automatic sign-in loop that prevents the user from switching accounts."

他们建议的代码是:

public void onClick(View v) {
if (v.getId() == R.id.sign_out) {
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
public void onComplete(@NonNull Task<Void> task) {
// user is now signed out
startActivity(new Intent(MyActivity.this, SignInActivity.class));
finish();
}
});
}
}

但是由于我只有一个事件,所以我无法执行 startActivity。

所以我的问题是如何防止 Smart Lock for Passwords 在用户注销后尝试重新登录?

这是我的其余授权代码(如果相关):

override fun onStart() {
super.onStart()

// Enable Auth listener
startAuthListener()

// If user is not logged in, start the login process
if(!sharedViewModel.isUserAuthenticated()){
startLoginProcess()
}

}

private fun initializeAuthListener() {
mAuthStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
if (null != firebaseAuth.currentUser) {
// User is authenticated
// user = firebaseAuth.currentUser
sharedViewModel.setUser(firebaseAuth.currentUser)
//refresh all data by calling getAllCollections, getAllPois
sharedViewModel.refreshLocalCacheData()

} else {
// User is not signed in so kick off FirebaseUI login
startLoginProcess()
}
}
}

private fun startAuthListener(){
authService.addAuthStateListener(mAuthStateListener)
}

private fun startLoginProcess(){
val providers = Arrays.asList(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build())

// Create and launch sign-in intent
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN)
}

最佳答案

如果您不想为您的 Firebase UI 禁用 Google 智能锁,那么您可以使用

.setIsSmartLockEnabled(boolean)

属性

AuthUI.getInstance().createSignInIntentBuilder()

示例:

private final Intent signIn = AuthUI.getInstance()
.createSignInIntentBuilder().setIsSmartLockEnabled(false)
.setAvailableProviders(providers)
.build();

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

if (auth.getCurrentUser() != null)
{
//User is already loged in
//show the main page

} else startActivityForResult(signIn, RC_SIGN_IN);
}

这里我使用了一个全局变量来存储 Intent,以便在需要时重用它。但这并不总是必要的。

这不是解决问题的正确方法,但禁用智能锁只是禁用用户可能拥有的功能。所以更好的解决方案是使用智能锁。

要在使用智能锁时注销用户,您应该添加:

Credentials.getClient(this).disableAutoSignIn();

到您的注销功能。这将防止智能锁在用户注销后立即重新登录。

关于firebase - 如何在 Firebase Auth UI 注销后禁用密码自动登录请求的智能锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53072826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com