Firebase 电子邮件验证不适用于 ActionCodeSetting
Firebase Email verification not working with ActionCodeSetting
我正在尝试实现用户电子邮件的验证(在电子邮件模板中使用默认验证 URL),以及一个 ActionCodeSetting URL(动态 link)来实现用户回到应用程序。我对 Firebase 的 ActionCodeSetting 电子邮件验证应该如何工作感到困惑。我已经阅读了所有可用的文档页面,但我仍然不清楚如何正确配置 "continue URL" 以不抢占和覆盖默认验证 URL.
我做了什么:
- 我用自动生成的电子邮件验证测试了电子邮件验证link。有效。
- 然后我添加了一个 ActionCodeSetting URL,它使用一个添加到 XCode 项目的关联域的域。这有助于在点击验证后将用户带回应用程序 link。
- 问题:电子邮件验证不再有效。
这是我实现的代码:
var actionCodeSettings = ActionCodeSettings.init()
actionCodeSettings.handleCodeInApp = true
let user = Auth.auth().currentUser
let urlString = "https://blaproject.page.link/zCB4"
actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable:true, minimumVersion:"12")
Auth.auth().currentUser?.sendEmailVerification(with: actionCodeSettings, completion: { (error) in
print("verification email sent")
print("action code setting URL is: \(String(describing: actionCodeSettings.url))")
})
这是来自 Firebase 控制台中电子邮件模板的默认验证 URL:
https://blaproject-ea9d6.firebaseapp.com/__/auth/action?mode=&oobCode=
这是通过上述代码发送的验证 URL:
所以我的问题是,为什么这个 URL 不验证用户的电子邮件,然后使用继续 URL(和关联的域)来触发应用程序打开?它只会触发应用程序打开,而不会验证用户的电子邮件。
感谢您提供的任何提示,帮助我理解我不理解的地方:)
当 link 触发您的应用程序打开时。您需要从深层 link 解析 oobCode
。您可以使用 FDL 客户端库来获取深度 link。关于deeplink的格式以及如何解析代码请参考以下文档:https://firebase.google.com/docs/auth/custom-email-handler
获得代码后,您需要使用 auth.applyActionCode(code)
API 应用它。这将验证电子邮件。
验证后,可以调用user.reload()
更新用户上的emailVerified
属性。如果您使用的是 Firebase 安全规则,您还可以强制 user.getIdToken(true)
使用更新后的验证电子邮件强制刷新令牌。
我正在尝试实现用户电子邮件的验证(在电子邮件模板中使用默认验证 URL),以及一个 ActionCodeSetting URL(动态 link)来实现用户回到应用程序。我对 Firebase 的 ActionCodeSetting 电子邮件验证应该如何工作感到困惑。我已经阅读了所有可用的文档页面,但我仍然不清楚如何正确配置 "continue URL" 以不抢占和覆盖默认验证 URL.
我做了什么:
- 我用自动生成的电子邮件验证测试了电子邮件验证link。有效。
- 然后我添加了一个 ActionCodeSetting URL,它使用一个添加到 XCode 项目的关联域的域。这有助于在点击验证后将用户带回应用程序 link。
- 问题:电子邮件验证不再有效。
这是我实现的代码:
var actionCodeSettings = ActionCodeSettings.init()
actionCodeSettings.handleCodeInApp = true
let user = Auth.auth().currentUser
let urlString = "https://blaproject.page.link/zCB4"
actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable:true, minimumVersion:"12")
Auth.auth().currentUser?.sendEmailVerification(with: actionCodeSettings, completion: { (error) in
print("verification email sent")
print("action code setting URL is: \(String(describing: actionCodeSettings.url))")
})
这是来自 Firebase 控制台中电子邮件模板的默认验证 URL:
https://blaproject-ea9d6.firebaseapp.com/__/auth/action?mode=&oobCode=
这是通过上述代码发送的验证 URL:
所以我的问题是,为什么这个 URL 不验证用户的电子邮件,然后使用继续 URL(和关联的域)来触发应用程序打开?它只会触发应用程序打开,而不会验证用户的电子邮件。
感谢您提供的任何提示,帮助我理解我不理解的地方:)
当 link 触发您的应用程序打开时。您需要从深层 link 解析 oobCode
。您可以使用 FDL 客户端库来获取深度 link。关于deeplink的格式以及如何解析代码请参考以下文档:https://firebase.google.com/docs/auth/custom-email-handler
获得代码后,您需要使用 auth.applyActionCode(code)
API 应用它。这将验证电子邮件。
验证后,可以调用user.reload()
更新用户上的emailVerified
属性。如果您使用的是 Firebase 安全规则,您还可以强制 user.getIdToken(true)
使用更新后的验证电子邮件强制刷新令牌。