Firebase电子邮件验证不适用于ActionCodeSetting

时间:2018-07-04 16:41:01

标签: firebase firebase-dynamic-links ios-universal-links email-verification

我正在尝试对用户的电子邮件进行验证(在电子邮件模板中使用默认的验证URL),以及一个ActionCodeSetting URL(动态链接)以将用户带回应用程序。我对使用ActionCodeSetting进行Firebase的电子邮件验证应该如何工作感到困惑。我已经阅读了文档的每个可用页面,但仍然不清楚如何正确配置“继续URL”以不抢占和覆盖默认验证URL。

我做了什么:

  1. 我使用自动生成的电子邮件验证链接测试了电子邮件验证。有效。
  2. 然后,我添加了一个ActionCodeSetting URL,该URL使用的域已添加到XCode项目的“关联域”中。这可以使用户在单击验证链接后将其带回应用程序。
  3. 问题:电子邮件验证不再起作用。

这是我实现的代码:

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:

  

https://blaproject.page.link?link=https://blaproject-ea9d6.firebaseapp.com//auth/action?apiKey%3DAIzaSyAi1fxd-HdkfXzYJxTpwmB3_mVCy5gvWxA%26mode%3DverifyEmail%26oobCode%3DqjvGoqc1n3ya0OIi_tWIYTpp59DYKgB6Sbj0EymN2IkAAAFkYNutMA%26continueUrl%3Dhttps://blaproject.page.link/zCE4%26lang%3Den&apn=com.example.android&amv=12&ibi=blaproject.blaprojectV0-2&ifl=https://blaproject-ea9d6.firebaseapp.com//auth/action?apiKey%3DAIzaSyAi1fxd-HdkfXzYJxTpwmB3_mVCy5gvWxA%26mode%3DverifyEmail%26oobCode%3DqjvGoqc1n3ya0OIi_tWIYTpp59DYKgB6Sbj0EymN2IkAAAFkYNutMA%26continueUrl%3Dhttps://blaproject.page.link/zCE4%26lang%3Den

所以我的问题是,为什么该URL不验证用户的电子邮件,然后使用继续URL(及相关域)触发应用打开?它只会触发应用打开,而无需验证用户的电子邮件。

感谢您提供的任何提示,可以帮助我了解我不了解的内容:)

1 个答案:

答案 0 :(得分:2)

当链接触发您的应用打开时。您需要从深层链接解析oobCode。您可以使用FDL客户端库来获取深层链接。请参阅以下有关深层链接格式以及如何解析代码的文档:https://firebase.google.com/docs/auth/custom-email-handler

一旦获得代码,就需要使用auth.applyActionCode(code) API来应用它。这将验证电子邮件。

验证后,您可以调用user.reload()来更新用户的emailVerified属性。如果您使用的是Firebase安全规则,也可以强制user.getIdToken(true)强制使用更新后的已验证电子邮件来刷新令牌。