我正在尝试实现用户电子邮件的验证(使用电子邮件模板中的默认验证URL)和ActionCodeSetting URL(动态链接)以将用户带回应用程序 . 我对Firebase使用ActionCodeSetting进行电子邮件验证的方式感到困惑 . 我已经阅读了每个可用的文档页面,我仍然不清楚如何正确配置“继续URL”以便不抢占和覆盖默认验证URL .
我做了什么:
-
我使用自动生成的电子邮件验证链接测试了电子邮件验证 . 有效 .
-
然后,我添加了一个ActionCodeSetting URL,该URL使用添加到XCode项目的Associated Domains的域 . 这样可以在点击验证链接后将用户带回应用 .
-
问题:电子邮件验证不再有效 .
这是我实现的代码:
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控制台中电子邮件模板的默认验证网址:
https://blaproject-ea9d6.firebaseapp.com/__/auth/action?mode=&oobCode=
以下是上述代码发送的验证网址:
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 回答
当链接触发您的应用程序打开时 . 您需要从深层链接解析
oobCode
. 您可以使用FDL客户端库来获取深层链接 . 请参阅以下文档,了解深层链接的格式以及如何解析代码:https://firebase.google.com/docs/auth/custom-email-handler获得代码后,需要使用
auth.applyActionCode(code)
API应用它 . 这将验证电子邮件 .验证后,您可以调用
user.reload()
来更新用户的emailVerified
属性 . 如果您使用的是Firebase安全规则,还可以强制user.getIdToken(true)
强制使用更新的已验证电子邮件刷新令牌 .