gpt4 book ai didi

ios - 如何通过传递 Firebase 引用来跟踪用户?

转载 作者:行者123 更新时间:2023-11-28 12:17:46 25 4
gpt4 key购买 nike

所以我正在构建一个 iOS 应用程序,它要求用户注册并登录。在用户登录后,登录 View Controller 转至用户输入数据的 TableView Controller 。在用户确认他们输入的数据信息后,它会转到一个交付信息 View Controller ,他们在其中输入送货地址信息。我的问题是,我怎样才能找到用户输入的数据所在的位置以及他们输入的送货地址信息仍然与该特定用户相关?那么如果另一个用户登录,他们的数据量和送货地址信息存储在他们自己的节点下并且与任何其他用户分开?想象一下,就像任何送餐应用程序一样,我很想知道他们如何跟踪每个用户的订单、送货地址等附加到特定用户的信息?现在,每次我尝试为不同的用户创建新的引用时,它都会替换旧的引用,即使它是由不同的用户存储的。

 import UIKit
import FirebaseDatabase
import FirebaseAuth

class LogInController: UIViewController {

var ref: DatabaseReference!


@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var passwordField: UITextField!


func placeholders() {
emailField.placeholder = "Enter Email"
passwordField.placeholder = "Enter Password"
}






@IBAction func loginButton(_ sender: AnyObject) {

Auth.auth().signIn(withEmail: emailField.text!, password: passwordField.text!, completion: { (user, error) in




let userID: String = (user?.uid)!
let userEmail: String = self.emailField.text!

self.ref.child("Users").childByAutoId().setValue(userEmail + " " + userID)




if error != nil {
print(error?.localizedDescription as Any)
}

else {
print("User logged in with UserID of: " + (user?.uid)!)
}
})
performSegue(withIdentifier: "signedIn", sender: self)


}



@IBAction func signoutButton(_ sender: Any) {
print("User has logged out...")
try! Auth.auth().signOut()
}



@IBAction func registerButton(_ sender: AnyObject) {

Auth.auth().createUser(withEmail: emailField.text!, password: passwordField.text!, completion: { (user, error) in

if error != nil {
print(error?.localizedDescription as Any)
return
}

print("User created with UserId of: " + (user?.uid)!)


})
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let flavorsVC = segue.destination as? FlavorsController {
flavorsVC.ref = ref
let userEmail = emailField.text
flavorsVC.email = userEmail!

}
}







override func viewDidLoad() {
super.viewDidLoad()


placeholders()
ref = Database.database().reference()

}

我正在尝试将数据保存在 View Controller 中:

import UIKit
import FirebaseAuth
import Firebase
import FirebaseDatabase

class FlavorsController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var bookieFlavors = ["Chocolate Chip", "Sugar w/o icing", "Sugar w/ icing", "Peanut Butter", "Honey", "Shortbread", "Ginger", "Double Chocolate", "Macadamie Nut", "Oatmeal Raisin", "Snickerdoodle"]
var amount = [Int]()
var bookieTotal = Int()
var ref: DatabaseReference!
var flavorRef: DatabaseReference!
var email = String()





override func viewDidLoad() {
super.viewDidLoad()
for _ in self.bookieFlavors {
self.amount.append(0)
}
flavorTable.delegate = self
flavorTable.dataSource = self

//database references
ref = Database.database().reference()
flavorRef = Database.database().reference()



}

func emptyAmount(_ sender: UIButton) {
print("Button Held, Amount Emptied")
self.amount[sender.tag] = self.amount[sender.tag] - (self.amount[sender.tag] + 1)
let cell = self.flavorTable.cellForRow(at: IndexPath(row: sender.tag, section: 0)) as? FlavorTableCell
cell?.bookieAmount.text = "= \(self.amount[sender.tag])"

}


@IBAction func bookieButton(_ sender: UIButton) {

self.amount[sender.tag] = self.amount[sender.tag] + 1
let cell = self.flavorTable.cellForRow(at: IndexPath(row: sender.tag, section: 0)) as? FlavorTableCell
cell?.bookieAmount.text = "= \(self.amount[sender.tag])"
// print(amount[sender.tag])

self.bookieTotal = amount.reduce(0, +)
print(bookieTotal)
}




@IBOutlet weak var flavorTable: UITableView!


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

}

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

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


//flavor label configuration
cell.flavorLabel.text = bookieFlavors[indexPath.row]

//amount configuration
cell.bookieAmount.text = "= \(self.amount[indexPath.row])"
cell.bookieButton.tag = indexPath.row
cell.bookieButton.addTarget(self, action: #selector(bookieButton(_:)), for: .touchUpInside)
cell.bookieButton.addTarget(self, action: #selector(emptyAmount(_:)), for: .touchDownRepeat)

return cell

}

@IBAction func registerBookieAmount(_ sender: Any) {
print(bookieTotal)

let amount: Int = bookieTotal
let user = Auth.auth().currentUser

if ((user) != nil) {


}
}

最佳答案

如果不知道您的数据结构,这有点困难,但看起来每次用户登录时,都会使用此处的代码为他们创建一个新节点:

self.ref.child("Users").childByAutoId().setValue(userEmail + ""+ userID)

不要使用创建唯一推送 ID 的 childByAutoId(),而是将 userID 设为 key :

self.ref.child("Users/\(userID)").setValue(["email": userEmail])

然后可以监听ref.child("Users/\(userID)")的值,获取用户保存的数据。您还可以将任何数据写入同一路径,例如您提到的送货地址。

顺便说一句,我建议在 createUser 中调用 self.ref.child("Users/\(userID)").setValue(["email": userEmail]) (withEmail: email, password: password) 因为这个节点不需要每次用户登录都重写

关于ios - 如何通过传递 Firebase 引用来跟踪用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45888590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com