Firebase Auth & Realtime Database в Xcode: как показать только данные, относящиеся к ОДНОМУ пользователю, а не ко всем? - PullRequest
0 голосов
/ 22 февраля 2019

В xcode, использующем Firebase Auth и Realtime Database, я пытаюсь создать приложение на основе информации, где пользователь входит в систему и видит информацию, которая уже была помещена в базу данных Realtime, а не всю базу данных.

Как связать аутентификацию с базой данных?Вот как выглядит моя текущая база данных:

введите описание изображения здесь

У меня есть два viewController, один для входа в систему и один, когда мы вошли в систему:

Вот мой код для моей страницы входа в систему:

import UIKit
import Firebase

class LoggedInViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


    @IBOutlet weak var loginlbl: UILabel!

    @IBOutlet weak var tbl: UITableView!

    var ref: DatabaseReference!
    var jobList = [JobModel]()

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let job = jobList[indexPath.row]

        let alertController = UIAlertController(title:job.shipper, message:"Update", preferredStyle:.alert)


        let deleteAction = UIAlertAction(title: "Delete", style:.default){(_) in
               //self.deleteAction(job: job!)
        }
        let updatedAction = UIAlertAction(title: "Update", style:.default){(_) in

            let id = job.id

            let collected = alertController.textFields?[0].text
            let delievered = alertController.textFields?[1].text

           // ref.child("job").setValue("collected")
            //self.update(collected: collected!, delievered: delievered!)

        }

        alertController.addTextField{(textField) in
            textField.text = job.delievered

        }
        alertController.addTextField{(textField) in
            textField.text = job.collected

        }

        alertController.addAction(updatedAction)

        alertController.addAction(deleteAction)

        present(alertController, animated: true, completion: nil)
    }


    func updatedJob(id: String, collected: String, delievered: String){
        let job = [
            "id": id,
            "collected": collected,
            "delivered": delievered]

        ref.child(id).setValue(job)

    }


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell

        let job: JobModel

        job = jobList[indexPath.row]

        cell.lblCol.text = job.collection
        cell.lblDel.text = job.delivery
        cell.lblShip.text = job.shipper
        cell.lblCon.text = job.consignee
        cell.lblEmai.text = job.email
        cell.lblRef.text = job.reference
        cell.lblFreight.text = job.freight
        cell.collected.text = job.collected
        cell.delivered.text = job.delievered

        return cell  }


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return jobList.count
}

override func viewDidLoad() {

        super.viewDidLoad()

if FirebaseApp.app() == nil {
FirebaseApp.configure()     }


ref = Database.database().reference().child("jobs");

ref.observe(DataEventType.value) { (snapshot) in

if snapshot.childrenCount>0 {

self.jobList.removeAll()

for jobs in snapshot.children.allObjects as! [DataSnapshot]{
    let jobObject = jobs.value as? [String: AnyObject]
    let jobId = jobObject?["id"]
    let jobShipper = jobObject?["shipper"]
    let jobConsignee = jobObject?["consignee"]
    let jobEmail = jobObject?["email"]
    let jobReference = jobObject?["reference"]
    let jobFreight = jobObject?["freight"]
    let jobCollection = jobObject?["collection date"]
    let jobDelivery = jobObject?["delivery date"]
    let jobPod = jobObject?["pod"]
    let jobCollected = jobObject?["collected"]
    let jobDelivered = jobObject?["delivered"]

  let job = JobModel(id: jobId as! String?,
            shipper: jobShipper as! String?,
            consignee: jobConsignee as! String?,
            email: jobEmail as! String?,
            reference: jobReference as! String?,
            freight: jobFreight as! String?,
            collection: jobCollection as! String?,
            delivery: jobDelivery as! String?,
            pod: jobPod as! String?,
            collected: jobCollected as! String?,
            delivered: jobDelivered as! String?)

            self.jobList.append(job)
}
            self.tbl.reloadData()

Вот мой код для моей страницы входа в систему:

import UIKit
import Firebase
import FirebaseAuth

class LoginViewController: UIViewController {

    static var isAlreadyLaunchedOnce = false

    @IBOutlet weak var txtemail: UITextField!

    @IBOutlet weak var txtpass: UITextField!


    var isSignin:Bool = true

    override func viewDidLoad() {
        super.viewDidLoad()

       if FirebaseApp.app() == nil {
        FirebaseApp.configure()
       }
    }


    @IBAction func submit(_ sender: UIButton) {

        if let email = txtemail.text, let passowrd = txtpass.text

        { Auth.auth().signIn(withEmail: email, password: passowrd) { (user, error) in
                if user != nil {
                    self.performSegue(withIdentifier: "goto", sender : self)
                }
                else {
                    let alert = UIAlertController(title: "Username or Password Incorrect", message: nil, preferredStyle: .alert)
                    let okButton = UIAlertAction(title: "Ok", style: .default, handler: nil)
                    alert.addAction(okButton)
                    self.present(alert, animated: true, completion: nil)
                }
            }
        }
}
}

Поэтому мой вопрос заключается в том, как мне использовать firebase Войти в свою учетную записьбазы данных, но вижу только информацию для каждого входа в систему, а не всю базу данных, потому что в настоящее время я вижу всю базу данных в табличном представлении.

1 Ответ

0 голосов
/ 22 февраля 2019

Как говорит Деннин В. Возможно, вам понадобится изменить организацию данных, как я понимаю, это не так сложно, вы можете сохранить Auth UID в качестве идентификатора для объекта задания.

После этогоВам просто нужно сделать запрос к вашей БД, что-то вроде этого:

let query = ref.queryEqual(toValue: Auth.auth().currentUser!.uid, childKey: "id")

эта строка Auth.auth (). CurrentUser? .Uid получает UID зарегистрированного пользователя,и если вы измените способ сохранения заданий в своей базе данных, этот запрос будет извлекать потомков, которые соответствуют этому идентификатору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...