我在Firebase中看到了很多关于授权的问题,但没有一个帮助(授权方式有点不同)。我不是那么有经验的iOS开发,所以我不仅需要在代码中提供帮助,还需要在UX中提供帮助。以下是我的代码:
func loginDidFinish(email: String, password: String, type: LFLoginController.SendType) {
// Server call implementation here
if type == .Login {
if user.exists { // check if user exists
FIRAuth.auth()?.signInWithEmail(email, password: password, completion: {
navigationController?.popViewControllerAnimated(true)
})
} else {
self.controller.wrongInfoShake()
}
} else { // type == .SignUp
if user.exists { // check if user exists
FIRAuth.auth()?.signInWithEmail(email, password: password, completion: { (user, error) in
//
})
} else {
FIRAuth.auth()?.createUserWithEmail(email, password: password, completion: { (user, error) in
//
})
}
}
print(email)
print(password)
print(type)
// handling errors
if email == "" && password == "" {
controller.wrongInfoShake()
} else {
navigationController?.popViewControllerAnimated(true)
}
}
这是我登录的功能。首先,我使用{{3>}的登录页面框架(是的,我自己懒得自己)。我使用Firebase作为后端服务器来存储该帐户。
现在,我不知道如何检查用户是否已存在于系统中。此外,如果发生任何错误,LFLoginController
lib提供了名为wrongInfoShake()
的函数,我每次发生错误时都会使用它,但我不确定是否应该提供错误的描述( 表示提交AlertControl
)(这是UX问题btw )。
当类型更改为 SignUp 时,即使用户使用类型SignUp,当用户键入已使用该信息登录时已存在的电子邮件和密码时,它是否正常?
当SignUp继续时,我应该处理任何错误吗?
答案 0 :(得分:2)
你在这里有一些问题,我会尝试回答所有问题:
检查用户是否已存在的最佳方式是completionBlock
signInWithEmail()
和createUserWithEmail()
,如果发生错误,您知道这可能是其中之一案例。如果您仍然希望有一个方法,那么对API的新调用称为fetchProvidersForEmail()
,它返回一组提供者,在您的情况下是电子邮件提供者。
不要使用警报控制器,这会过度使用,只显示一个错误标签,说明Login was incorrect
或An error occured
,或者您想要显示的任何错误。除非确实需要,否则尽量避免提醒。
用户已经习惯于在尝试使用他的电子邮件注册时收到User already exists
的错误,并且从用户体验的角度来看,这会导致一些错误,因为他会将其视为一个清晰,新的帐户,所以不,只是显示一个标签,说明用户存在,其他人已经注册了他的电子邮件是非常不可能的。
注册时,firebase可以提供E-mail already exists
错误,就像我在第3点中提到的那样,如果电子邮件处理错误,它也可以提供Invalid e-mail
。应该通过向用户显示一些消息来处理这个和所有其他错误,否则他会感到困惑。要处理它们,只需检查completion
。
答案 1 :(得分:1)
您可以查看Firebase UI Auth:
" FirebaseUI提供了一个插入式身份验证解决方案,可以处理用户使用电子邮件地址和密码,Google登录和Facebook登录进行登录的UI流程。它建立在Firebase Auth。
之上FirebaseUI Auth组件在移动设备和网站上实施身份验证的最佳做法,可以最大限度地为您的应用进行登录和注册转换。它还处理边缘案例,如帐户恢复和帐户链接,这些案例可能是安全敏感的,并且容易出错,无法正确处理。
FirebaseUI可以轻松定制,以适应应用程序的其他视觉风格,并且它是开源的,因此您无法实现所需的用户体验。"