如何使用Swift中的Firebase验证用户电子邮件和密码

时间:2017-02-15 13:51:52

标签: ios json swift firebase firebase-authentication

我是Swift和Firebase的新手。我正在开发一个IOS应用程序。对于此应用程序,我需要验证用户的电子邮件和密码。我有一个包含用户详细信息的Json文件。请帮我验证如何验证用户的电子邮件和密码?我已经阅读了Stackoverflow中的几篇帖子,但我被卡住了。 以下是我的Json和swift代码。

Json文件:

{
   "ID": 123,
   "Membership": 1234,
   "title": "Mr.",
   "firstname": "kumar",
   "lastname": "sandeep",
   "email": "sandeepcs2005@gmail.com",
   "membrshipstatus": "Active",
   "volunteer": "Yes",
   "creationDate": "2016-12-27 "
 },

这是我的快速代码:

import UIKit
import Firebase
import FirebaseAuth



class ViewController: UIViewController {

    @IBOutlet weak var emailofUser: UITextField!
    @IBOutlet weak var passwordofUser: UITextField!
    var ref:FIRDatabaseReference! //created a variable ref of type firebase database reference
    var databaseHandle:FIRDatabaseHandle? //to handle to database listener like to stop or start it



    var postdata = [String]?()
    var postall = [[String:String]]()



    override func viewDidLoad() {
        super.viewDidLoad()



            //set firebase reference
        ref = FIRDatabase.database().reference()

        let userRef = ref.child("Hub")
        //let queryRef = userRef.queryOrderedByChild("email").queryEqualToValue("mr.stefankirsch@gmx.com")


        // Consider adding ".indexOn": "email" at /hubeindhoven-95f09 to your security rules for better performance


       userRef.queryOrderedByChild("email").queryEqualToValue("mr.sandeep@gmail.com").observeEventType(.Value, withBlock: { snapshot in

            for child in snapshot.children {

            let snap = child as! FIRDataSnapshot

                let userDict = snap.value as! [String:Any]

                let userId = userDict["ID"]
                let lastname = userDict["lastname"]
                print("\(userId!)  \(lastname!)")


            }
                    })

2 个答案:

答案 0 :(得分:1)

我认为您的firebase json所发布的内容是错误的,您是否按照标准方式添加用户(在firebase Web界面中)。 每个用户没有唯一的ID。例如,我添加了一个......

{
  "users" : {
    “UOLTzymgIyeGgNBSS0UgUs95od21” : {
      "email" : "aaaaa@gmail.com",
      "firstName" : "aaaaa",
      "lastName" : “bbbb”,
      "mobileNo" : 12122121
    },
    “CveQ13sLmMO93yHZEAP24xHA3VZ1” : {
      "email" : "bbbb@gmail.com",
      "firstName" : “bbbb”,
      "lastName" : “bbbbb”,
      "mobileNo" : 11223333
    }
  }
}

我添加了登录代码,这对我有用,希望这能解决您的问题

    override func viewDidLoad() {
        super.viewDidLoad()

        FIRAuth.auth()!.addStateDidChangeListener() { auth, user in
            if user != nil {
               self.performSegueWithIdentifier("UserDetails", sender: self)
            }
        }
   }

@IBAction func LoginPage(sender: UIButton) {
        FIRAuth.auth()!.signIn(withEmail: textFieldLoginEmail.text!,
                               password: textFieldLoginPassword.text!)
}

答案 1 :(得分:1)

有一些问题需要解决。

第一个是Firebase为您处理电子邮件/密码身份验证,创建Firebase用户后,身份验证非常简单:

FIRAuth.auth()?.signIn(withEmail: email, password: password) { (user, error) in
  // ...
}

不需要Firebase中的其他JSON结构。但是,如果要存储有关每个用户的其他信息,则可以使用用户标识(uid)。在firebase中创建用户时会自动生成该uid,然后您还可以创建一个单独的节点来包含其他用户信息

users
   uid_0
     name: "Leeeeroy"
     favorite_game: "WoW"

由于您已经拥有JSON结构中的用户,我建议您制作一个快速应用来迭代这些用户,创建他们的Firebase帐户并将个人数据添加到用户节点。

创建用户也很简单

FIRAuth.auth()?.createUser(withEmail: email, password: password) { (user, error) in
  // ...
}

如果确实不想创建Firebase用户,您可以推出自己的身份验证方案(不推荐)。