首页 > 解决方案 > 将带有参数的 Firebase 动态链接连接到云函数以在 React Native 应用程序中重置用户密码

问题描述

我正在尝试使用 Firebase Auth 创建一个 React Native 应用程序来处理身份验证和一个动态链接来实现应用程序内密码重置功能。由于我没有用于深度链接的域,我首先尝试google.com希望它可以神奇地工作 LOL。在这种徒劳无功的努力上浪费了几个小时之后,我现在尝试使用云函数 URL,但似乎没有使用动态链接中的正确参数调用我的函数。

在花了整整两天时间阅读这方面的文档并尝试自己解决之后,我几乎束手无策。这是我到目前为止所取得的成就:

  1. 编写并部署了以下 Cloud Function:
const functions = require("firebase-functions");

exports.verifyPasswordReset = functions.https.onRequest(async (req, res) => {
    functions.logger.log('verifyPasswordReset called with params: ', req.query);
    // Send back the emailed OOB code that the user must
    // enter to confirm their password reset request
    res.json({ result: `OOB code: ${req.query.oobCode}.` });
});
  1. 在 Firebase 控制台中启用动态链接并创建如下屏幕截图所示的链接。为了隐私和安全,链接的敏感部分已经过编辑,但请放心,为了调用上面定义的云功能,一切都已按原样进行设置 - 除非我在所有阅读和测试中遗漏了一些东西。

动态链接信息

  1. 创建、下载并正确放置我的app/google-services.json文件。
  2. build.gradle在和中添加了必要的行app/build.gradle
  3. 将以下意图过滤器添加到我的AndroidManifest.xml
<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="<redacted for security>" android:pathPrefix="/verifyPasswordReset" android:scheme="http"/>
  <data android:host="<redacted for security>" android:pathPrefix="/verifyPasswordReset" android:scheme="https"/>
</intent-filter>
  1. ?d=1通过在我的浏览器中访问添加了调试参数 ( )的短链接 URL 来测试动态链接。收到以下警告:

动态链接有 1 个警告。没有配置可以防止此域上的网络钓鱼(短链接)。将 URL 模式设置为在 Firebase 动态链接控制台中列入白名单。

从那以后我已经使用该模式完成了^https?://my\.domain\.com/\?link=.*?&apn=.*$,但随后谷歌抱怨说:

动态链接有 1 个错误。在此 Google 项目中,我们无法将参数“https://(deep link)”与列入白名单的 URL 模式匹配。

我不明白为什么\?link=.*?正则表达式的一部分无法捕获深层链接 URL。根据我在 Google RE2 语法上阅读的所有内容,这应该是完全可以接受的并且可以顺利工作!或者 URL 是否需要进行 % 编码?

总之总结一下:

  1. 我在我的应用程序中单击“重置密码”按钮。
  2. 该应用程序成功发送密码重置电子邮件。
  3. 我从 Gmail 应用程序单击该电子邮件中的链接,然后被重定向回我的应用程序的正确屏幕。
  4. 此时,该函数应该运行并oobCode从重置链接返回参数,但这是一切都崩溃的地方。如何将参数从重置链接传递给函数?

对于给出的任何建议,对于冗长的文字和 MTIA 表示歉意:-)

标签: androidfirebasereact-nativegoogle-cloud-functionsfirebase-dynamic-links

解决方案


推荐阅读