我正在使用 Firebase-UI 身份验证,并且想为我的应用程序实现删除帐户功能。
某些安全敏感操作(例如删除帐户、设置主电子邮件地址和更改密码)要求用户最近登录。
要删除用户,该用户必须最近登录过,请参阅重新验证用户身份 https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
.getCredential(user.getEmail(), );//how can i get password of the user
// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "User re-authenticated.");
}
});
有没有办法从用户或任何其他解决方案获取当前密码?
我搜索了所有文档,但找不到为我提供用户当前密码的方法。
某些安全敏感操作(例如删除帐户、设置主电子邮件地址和更改密码)要求用户最近登录。
对,那是正确的。自上次登录起超过 5 分钟后,将无法执行删除帐户操作,因为该操作被视为敏感操作。
有没有办法从用户那里获取当前密码或任何其他解决方案?
No,您无法获取登录用户的密码。没有人会提供这个。当用户在上次登录后 5 分钟后尝试删除帐户时,您有两个可用选项:
-
您可以在 UI 中提供注销的可能性。这样,用户将被重定向到登录屏幕。一旦到达登录屏幕,用户就可以重新启动身份验证过程。
-
您可以让用户保持登录状态,但需要提供再次输入密码的选项。拿到密码后就可以拨打FirebaseUser#getEmail() https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#getEmail()获取登录用户的电子邮件。之后,您可以立即致电EmailAuthProvider#getCredential(字符串电子邮件,字符串密码) https://firebase.google.com/docs/reference/android/com/google/firebase/auth/EmailAuthProvider#getCredential(java.lang.String,%20java.lang.String)获取类型的对象验证凭证 https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AuthCredential。有了这样一个对象,你可以调用然后调用FirebaseUser#reauthenticate(AuthCredential 凭据) https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#reauthenticate(com.google.firebase.auth.AuthCredential)使用自己的凭据重新进行身份验证。
无论您选择什么选项,在成功验证或成功重新验证后,用户将能够在 5 分钟内删除帐户。
就我个人而言,我更喜欢第一个选项,因为它需要只有退出选项 https://medium.com/firebase-tips-tricks/how-to-authenticate-to-firebase-using-email-and-password-in-jetpack-compose-bd70ca56ea91。但由您决定哪个更适合您的用例。在代码中,它看起来像this https://github.com/alexmamo/FirebaseSignInWithEmailAndPassword.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)