我正试图阻止用户创建多个帐户。
具体来说,我想检查当前使用非Phone Auth方法登录的用户(Facebook,Google等)之前是否曾经通过Phone Auth登录。
创建电话验证帐户时,我要求用户输入电子邮件地址。创建用户后,我将使用以下方法将电子邮件地址保存到其authUser
帐户中:
authData.user.updateEmail(to: email, completion: { (error) in
// email added successfully
})
电子邮件地址已正确保存,并且在Firebase身份验证控制台中可见。
但是,当我稍后尝试使用该电子邮件地址查找提供商时,使用
Auth.auth().fetchProviders(forEmail: email, completion: { (providers, error) in
// providers.count = 0
})
或
Auth.auth().fetchSignInMethods(forEmail: email, completion: { (signInMethods, error) in
// signInMethods == nil
})
找不到电子邮件。
因此,电子邮件似乎已连接到User
,但未连接到提供商或登录方法。
是否可以将电子邮件连接到电话验证提供商数据,以便在查找多个帐户时找到电子邮件?还有另一种无需查询Firestore即可为这只猫换皮的方法吗?我想防止注销的用户访问文档。
答案 0 :(得分:0)
fetchSignInMethods
将不会返回任何结果,即使该电子邮件存在但没有提供者或登录方法也可以登录。
就您而言,您只需更新电子邮件或帐户。这还不够。用户必须使用电子邮件登录。例如,如果用户使用电子邮件链接或密码登录,则fetchSignInMethods
将返回这些登录方法。