当前位置: 首页 > 知识库问答 >
问题:

Firebase动态链接(控制台创建)支持使用ActionCodeSettings和密码重置的自定义查询参数?

龙繁
2023-03-14

调用firebasedynamiclinks.getInstance().getDynamicLink(getIntent())

使用pendingdynamiclinkdata.getlink().getQueryParameter(“oobcode”));从动态链接获取查询参数(在本例中获取用于重置密码的密码代码。

在上一步中使用oobCode并调用firebaseauth.getinstance().confirmpasswordreset(actionCode,password)按钮单击(从Use inputted editText字段中获取密码)来重置密码。

理想情况下,我希望在密码重置后登录我的用户。为了做到这一点,我需要有电子邮件地址使用密码重置(我需要从试图登录的用户获得firestore文档信息)。

所以我需要能够传递电子邮件地址到屏幕重置密码。

以下是我的相关代码片段:

初始“忘记密码屏幕”:用户在这里输入电子邮件。首先构建我的操作代码设置,然后执行sendPasswordResetEmail()方法。

String url = "https://example.com"; //my deep link set in Firebase console
        ActionCodeSettings settings = ActionCodeSettings.newBuilder()
                .setAndroidPackageName(
                        getPackageName(),
                        true, /* install if not available? */
                        null   /* minimum app version */)
                .setHandleCodeInApp(true)
                .setUrl(url)
                .build();

 mAuth.sendPasswordResetEmail(email, settings)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "Email sent.");
                        }
                        else {
                            Exception e = task.getException();
                            Log.w(TAG, "passwordResetRequest:failure " + e.getMessage(), task.getException());
                            if (e instanceof FirebaseAuthInvalidCredentialsException) {
                            }
                        }
                    }
                });

然后在电子邮件中选择链接后,我们进入重置密码屏幕。在这里,我们调用以下代码从动态链接中获取参数:

FirebaseDynamicLinks.getInstance()
                .getDynamicLink(getIntent())
                .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                    @Override
                    public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                        // Get deep link from result (may be null if no link is found)
                        Uri deepLink = null;
                        if (pendingDynamicLinkData != null && pendingDynamicLinkData.getLink() != null) {
                            deepLink = pendingDynamicLinkData.getLink();
                            actionCode = deepLink.getQueryParameter("oobCode");
                            actionMode = deepLink.getQueryParameter("mode");
                        }
                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "getDynamicLink:onFailure", e);
                    }
                });

最后,我们使用oobCode(允许密码重置的操作代码),在单击按钮和用户输入新密码时,我们使用以下方法重置密码:

resetPass.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (actionCode != null && !actionCode.equals(""))
                FirebaseAuth.getInstance().confirmPasswordReset(actionCode, newPassword.getText().toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful() && task.getResult() != null)
                            Log.d(TAG, "Deep Link confirmPassReset: " + task.getResult().toString());
                    }
                });
            }
        });

这就是我挣扎的地方。我试图在构建ActionCodeSettings时传递一个电子邮件地址。例如:string url=“https://example.com/?email=jsmith@gmail.com”;,然后尝试使用:deeplink.getQueryParameter(“email”)在重置密码屏幕中获取它们;,但是每次尝试都得到null。我错过了什么。是否可以通过在Firebase控制台中创建的动态链接传递自定义查询参数?如果没有,最好的方法是什么?

共有1个答案

潘雅珺
2023-03-14
val actionUrl = deepLink.getQueryParameter("continueUrl")
actionUrl.substring(actionURL.lastIndexOf("=") + 1, actionURL.length)
 类似资料:
  • 我正在为一个开源会议写一个应用程序。 最初每个与会者将通过电子邮件或短信收到不同的链接,如 https://example.com/?token=FCCFC8BFA07643A1CA8015CBE74F5F17 然后用这个链接打开app,我们就可以通过令牌知道用户是哪个与会者。 Firebase在2016年发布了新的I/O动态链接功能,为用户提供了更好的体验。 我曾经尝试过,但是我找不到任何方法来

  • 这件事我已经绞尽脑汁好几个星期了。我有麻烦得到一个自定义密码重置,让用户重置他们的应用程序内的密码。 到目前为止,我能够做到以下几点: 发送密码重置电子邮件。 当用户单击该链接时,如果安装了应用程序,请打开该应用程序,并将其引导到正确的activity。 确认我的动态链接放入浏览器后将重定向到我的网站。 确认在Android Studio内部测试时,我的动态链接会将用户重定向到正确的activit

  • 我直接在web界面中生成了一个新的动态链接。这基本上将用于每个人,或者这是我的希望。让我们将该链接称为link.some-app.com/email-link。然后,我将其设置为指向https://some-app-123f.firebaseapp.com/__/auth/action。去第一个带我去第二个,到目前为止一切都很好。这些链接只是打开网页,而不是应用程序,也没有中间页面。 我可以用li

  • 我有一个SpringBoot(1.5.6),带有SpringSecurity(4.2)和ThymeLeaf应用程序,允许用户重置密码。所有html页面都在src/resources/templates中。基本流程是: > 用户提供用户名(通过resetPage.html) 凭证已清除 生成令牌并通过电子邮件发送到用户名电子邮件 用户单击电子邮件中的url将重定向到重置密码页面(changePass

  • 我正在使用firebase来验证我的android应用程序中的用户。我在登录窗口中为用户提供了一个重置密码的选项。当用户点击按钮,它发送电子邮件成功。然而,当用户点击链接时,它总是显示 “请重置密码。重置密码的请求已过期,或链接已被使用” 2016年8月31日更新 我与firebase支持取得了联系,看起来API键有一些bug。如果更改浏览器API密钥,则不会更新。现在这个bug已经修复,重置密码

  • 问题内容: 我正在使用Spring Data JPA进行项目。我在数据库中有一个表作为my_query。 我想创建一个将字符串作为参数的方法,然后将其作为数据库中的查询执行。 方法: 例如,当我通过 那么它应该在数据库级别运行该查询。 存储库类如下。 但是,它没有按我预期的那样工作。它给出以下错误。 还有什么其他方法可以实现这个目标。提前致谢 问题答案: 您可以参数化的唯一部分是在子句中使用的值。