这是我的情况,我使用firebase作为iOS应用程序的数据库。
用户可以通过以下方式通过电子邮件登录:
@IBAction func signInButtonPressed(_ sender: UIButton)
{
if let email = emailField.text, let password = passwordField.text
{
FIRAuth.auth()?.signIn(withEmail: email, password: password)
{
(user, error) in
if let error = error
{
let alertController = UIAlertController(title: "Login or password incorrect", message:
"", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default,handler: nil))
self.present(alertController, animated: true, completion: nil) }
else
{
print("AUTH: EMAIL AUTH SUCCESSFUL")
User.currentUserId = user?.uid
User.startTrackingCurrentUser()
self.performSegue(withIdentifier: "ToFeed", sender: nil)
}
}
}
}
这一切都很完美。
但是,我希望用户使用他们的用户名而不是他们的电子邮件登录。
我在AUth中创建用户,数据也被复制到具有taht结构的数据库中:
--name of db
----posts
----users
------username
------email
------id
这怎么可能呢?
非常感谢你的帮助!
-----编辑-----
添加:` //开始检查
@IBAction func textFieldEditingDidChange(_ sender: Any) {
FIRDatabase.database().reference().child("users").child(self.emailField.text!).observeSingleEvent(of: .value, with: { (email) in
if let userDict = email.value as? [String:AnyObject]{
for each in userDict{
let email = each.1 as! String
}
}
if email.exists(){
print(email)
}else{
print("USER NOT EXIST")
}
})
}
输入正确的用户名时,我可以在我的控制台中获取快照:
Snap (username written) {
username = username;
email = "email@domain.net";
id = 8mbwfwMW0kZ4ip5mhyvEySxm4iI2;
}
如何获取电子邮件值呢?
我在这一切中苦苦挣扎,任何帮助都会令人惊叹!
谢谢你的帮助和时间!!