[英]Firebase Re-Authenticate Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value error
[英]Re-authenticate a user. with FirebaseUI auth for Android
我正在使用 Firebase-UI 身份验证,我想为我的应用程序实现删除帐户功能。
某些安全敏感操作(例如删除帐户、设置主要 email 地址和更改密码)要求用户最近登录。
要删除用户,该用户必须最近登录过,请参阅重新验证用户。
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.");
}
});
有没有办法从用户或任何其他解决方案获取当前密码?
我搜索了所有文档,但找不到给我当前用户密码的方法。
某些安全敏感操作(例如删除帐户、设置主要 email 地址和更改密码)要求用户最近登录。
对,那是正确的。 自上次登录后 5 分钟后,将无法执行删除帐户操作,因为它被视为敏感操作。
有没有办法从用户或任何其他解决方案获取当前密码?
不,您无法获取登录用户的密码。 没有人会提供那个。 当用户在上次登录后 5 分钟后尝试删除帐户时,您有两种选择:
您在 UI 中提供注销的可能性。 这样,用户将被重定向到登录屏幕。 一旦它登陆登录屏幕,用户就可以重新启动身份验证过程。
您可以让用户保持登录状态,但您需要提供一个选项来再次输入密码。 一旦你有了密码,你就可以调用FirebaseUser#getEmail()来获取登录用户的 email。 之后,您可以调用EmailAuthProvider#getCredential(String email, String password)来获取类型为 AuthCredential 的object 。 有了这样的 object,您可以调用FirebaseUser#reauthenticate(AuthCredential credential)以使用自己的凭据重新进行身份验证。
无论您选择什么选项,在成功验证或成功重新验证后,用户都可以在 5 分钟的时间范围内删除帐户。
就个人而言,我更喜欢第一个选项,因为它只需要一个注销选项。 但由您决定哪种更适合您的用例。 在代码中,它看起来像 这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.