我正在使用iOS应用程序,该应用程序将使用Firebase进行用户管理(注册,登录等)
我是Firebase的新手,但是一切正常。我已经连接好了,已经创建了用户并登录,等等。
但是,我正在尝试更改用户界面,以使“注册”按钮最初处于隐藏状态,并且仅在以下情况下显示:
我不知道#3和#4。
我一直在阅读文档,观看视频,在StackO以及其他地方追踪链接,但是我不知道该怎么办。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
如果您使用的是电子邮件和密码身份验证,则解决方案非常简单。
Firebase身份验证不允许重复的电子邮件,因此,当执行createUser函数时,如果电子邮件已经存在,Firebase将在error参数中返回emailAlreadyInUse错误。然后,您可以将其转换为NSError,以查看它是哪一个并进行适当处理。
所以功能就是这样
Auth.auth().createUser(withEmail: createEmail, password: password ) { user, error in
if let x = error {
let err = x as NSError
switch err.code {
case AuthErrorCode.wrongPassword.rawValue:
print("wrong password")
case AuthErrorCode.invalidEmail.rawValue:
print("invalid email")
case AuthErrorCode.accountExistsWithDifferentCredential.rawValue:
print("accountExistsWithDifferentCredential")
case AuthErrorCode.emailAlreadyInUse.rawValue: //<- Your Error
print("email is alreay in use")
default:
print("unknown error: \(err.localizedDescription)")
}
//return
} else {
//continue to app
}
我在该case语句中添加了一些随机错误,但请检查链接以获取所有AuthErrorCode的完整列表。
您也可以这样做
Auth.auth().fetchSignInMethods(forEmail: user, completion: { (signInMethods, error) in
print(signInMethods)
})
答案 1 :(得分:0)
我认为您可以使用此方法进行检查
let ref1 = Database.database().reference().child("Users").queryOrdered(byChild: "UserName").queryEqual(toValue: "UserName enter by user")
ref1.observeSingleEvent(of: .value) { (sanpshot) in
print(sanpshot.exists()) // it will return true or false
}
与电子邮件相同。