java - 重新验证用户。使用适用于 Android 的 FirebaseUI 身份验证

标签 java android firebase google-cloud-platform firebase-authentication

我正在使用 Firebase-UI 身份验证,并且想为我的应用程序实现删除帐户功能。

某些安全敏感操作(例如删除帐户、设置主电子邮件地址和更改密码)要求用户最近登录。

要删除用户,该用户必须最近登录过,请参阅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.");
            }
        });

有什么方法可以从用户处获取当前密码或任何其他解决方案吗?

我搜索了所有文档,但找不到提供用户当前密码的方法。

最佳答案

Some security-sensitive actions—such as deleting an account, setting a primary email address, and changing a password—require that the user has recently signed in.

是的,没错。距离上次登录超过 5 分钟后,将无法执行删除帐户操作,因为该操作被视为敏感操作。

Is there any way to get the current password from the user or any other solution?

,您无法获取登录用户的密码。没有人会提供这个。当用户在上次登录后 5 分钟后尝试删除帐户时,您有两个可用选项:

  1. 您可以在 UI 中提供注销的可能性。这样,用户将被重定向到登录屏幕。一旦到达登录屏幕,用户就可以重新启动身份验证过程。

  2. 您可以让用户保持登录状态,但您需要提供再次输入密码的选项。获得密码后,即可调用FirebaseUser#getEmail()获取登录用户的电子邮件。之后您可以调用EmailAuthProvider#getCredential(String email, String password)获取 AuthCredential 类型的对象。有了这样一个对象,你可以调用然后调用 FirebaseUser#reauthenticate(AuthCredential credential)使用自己的凭据重新进行身份验证。

无论您选择什么选项,在成功验证或成功重新验证后,用户将能够在 5 分钟内删除帐户。

就我个人而言,我更喜欢第一个选项,因为它需要 only a sign-out option 。但由您决定哪个更适合您的用例。在代码中,它看起来像 this .

关于java - 重新验证用户。使用适用于 Android 的 FirebaseUI 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75099569/

相关文章:

java - 我们如何在 hibernate 中处理并发事务

java - 如何在不同进程中运行两个 Activity

javascript - 如何使用云函数在 Firestore 中添加虚拟数据

java - 如何在 firebase android 中查询类似云函数中的数据库触发器

android - 添加和检索具有嵌套字段的对象 (Firestore)

java - 使用编程在android上设置触摸输入

java - JSESSIONID 持续时间

java - 当我使用 LocationManager.getLastKnowLocation() 时,应用程序在真实设备中的第二次启动时崩溃

Android - FirebaseMessaging - FirebaseInstanceId:后台同步失败 : MISSING_INSTANCEID_SERVICE

android - 如何动态调整android布局大小