GVKun编程网logo

无法在 Firebase Swift 中将数据附加到当前用户(无法在此)

18

本文将分享无法在FirebaseSwift中将数据附加到当前用户的详细内容,并且还将对无法在此进行详尽解释,此外,我们还将为大家带来关于Firebaseswift无法检索所有子值、Firebase读取

本文将分享无法在 Firebase Swift 中将数据附加到当前用户的详细内容,并且还将对无法在此进行详尽解释,此外,我们还将为大家带来关于Firebase swift无法检索所有子值、Firebase 读取和保存数据问题 (Swift)、Firebase-React:如何呈现当前用户?、Firebase获取当前用户uid的相关知识,希望对你有所帮助。

本文目录一览:

无法在 Firebase Swift 中将数据附加到当前用户(无法在此)

无法在 Firebase Swift 中将数据附加到当前用户(无法在此)

db.collection("users").document(userID).setData([
    "gender": selectedYearPicker
],merge: true)

Firebase swift无法检索所有子值

Firebase swift无法检索所有子值

我在 Swift构建的iOS应用程序中有一段代码,用于从Firebase实时数据库中检索所有节点.当我执行下面的代码时,我注意到它没有返回所有子节点.

当我查询未单独返回的特定节点时,首先代码返回’nil’,然后在第二次尝试时检索节点. (在此过程中不做任何代码更改).在此过程之后,节点开始显示结果,并检索所有节点功能.

示例1:首先返回nil,然后在第二次尝试时返回节点.我可以从控制台看到,并且肯定存在于数据库中.

ref?.child("transactions").child(email).child("14526452327").observeSingleEvent(of: .value,with: { (snapshot) in
                // Get user value
                let value = snapshot.value as? NSDictionary
                        print(value)
                        print("!!****************!!")
                // ...
            }) { (error) in
                print(error.localizedDescription)
            }

以下内容用于检索所有子值;首先,这并没有获得所有节点,但是在运行示例1中的代码(两次)后,它开始返回有问题的节点.

ref?.child("transactions").child(email).observeSingleEvent(of: .value,with: { (snapshot) in

        let childrenCount = snapshot.childrenCount
        var counter : Int = 0

        for trans in snapshot.children.allObjects as! [DataSnapshot]
        {
            counter = counter + 1

            self.ref?.child("transactions").child(email).child(trans.key).observeSingleEvent(of: .value,with: { (snapshot2) in

Here is a screenshot of the Firebase DB structure;

我还检查了我的Firebase查询和数据限制,我远远没有达到免费帐户的门槛.任何帮助是极大的赞赏.

解决方法

试试这个:

func getData() {
    // Making a reference
    let transactionRef = Database.database().reference(withPath: "transactions")
    transactionRef.observeSingleEvent(of: .value,with: { (snapshot) in

        // Printing the child count
        print("There are \(snapshot.childrenCount) children found")    

        // Checking if the reference has some values
        if snapshot.childrenCount > 0 {

            // Go through every child
            for data in snapshot.children.allObjects as! [DataSnapshot] {
                if let data = data.value as? [String: Any] {

                    // Retrieve the data per child


                    // Example
                    let name = data["name"] as? String
                    let age = data["age"] as? Int

                    // Print the values for each child or do whatever you want
                    print("Name: \(name)\nAge: \(age)")
                }
            }
        }
    })
}

Firebase 读取和保存数据问题 (Swift)

Firebase 读取和保存数据问题 (Swift)

这可能会帮助您前进。

尽可能长时间地将数据保留在 DataSnapshots 中是个好主意 - 例如转换为 Dictionary 会使处理变得更加复杂。

此外,排序也很重要,因为您可以看到第一步是获取子节点并将它们转换为数组以保持顺序

.observeSingleEvent 在这里使用,因为我只读取食物一次,没有留下未来变化的观察者。

func readAllFoods() {
    let ref = self.ref.child("foods") //self.ref points to MY firebase.
    ref.observeSingleEvent(of: .value,with: { snapshot in
        let allRestaurantsSnap = snapshot.children.allObjects as! [DataSnapshot] //contains all child nodes of food
        for foodSnap in allRestaurantsSnap { //iterate over each restaurant node
            let restaurantName = foodSnap.key //arborGrill,burgerKing etc
            let foodName = foodSnap.childSnapshot(forPath: "foodName").value as? String ?? "No food name"
            print(foodName)
        }
    })
}

我也会劝阻您不要在 NoSQL 数据库中使用数组。它们可能非常有限并且难以使用,就像您需要更改数组一样,必须读入、更改、删​​除和写回数组。

所以不是这个

reviewString
  0: Some Review
  1: Another Review

这样做

reviews
   -9as99idjk4ii9jas09 //created with childByAutoId
      review: "Awesome restaurant"
      by_user: "uid_1234"
      date: 20210131
   -ajsijo9fj9dkkfg00d
      review: "Top notch cuizine"
      by_user: "uid_5678"
      date: 20210210

Firebase-React:如何呈现当前用户?

Firebase-React:如何呈现当前用户?

如何解决Firebase-React:如何呈现当前用户??

我想将特定的用户数据呈现给react组件。用户注册时,他们将提交其场所的名称,该名称将保存到venueName变量中。我想提取此属性,然后将其呈现在GigRegister组件上。关于如何提取此信息的任何建议?

这是注册路线

app.post(''/registerVenue'',(req,res) =>{
    const newVenue = {
        email: req.body.email,password: req.body.password,confirmPassword: req.body.confirmPassword,venueName: req.body.venueName,venueAddress: req.body.venueAddress
    }

    let errors = {}

    if(isEmpty(newVenue.email)){
        errors.email = ''Email must not be empty''
    }else if (!isEmail(newVenue.email)){
        errors.email = ''must be a valid email address''
    }

    if(Object.keys(errors).length >0){
        return res.status(400).json(errors)
    }

    let token,userId
    db.doc(`/user/${newVenue.venueName}`).get()
    .then(doc => {
        if(doc.exists){
            return res.status(400).json({venueName: `This venue name is already taken`})
        } else {
            return firebase
            .auth()
            .createuserWithEmailAndPassword(newVenue.email,newVenue.password)
        }
    })
    .then(data=> {
        userId = data.user.uid;
        return data.user.getIdToken()
    })
    .then(idToken => {
        token = idToken
        const venueDetails ={
            email: newVenue.email,venueName: newVenue.venueName,venueAddress: newVenue.venueAddress,createdAt: new Date().toISOString(),userId
        }
        return db.doc(`/users/${newVenue.venueName}`).set(venueDetails)
    })
    .then(() => {
        return res.status(201).json({token})
    })
    .catch(err => {
        console.error(err)
        if(err.code === ''auth/email-already-in-use''){
            return res.status(400).json({email: ''Email is already in use''})
        } else {
            return res.status(500).json({error:err.code})
        }
    })
})

这是Gig注册路线(已登录的用户可以在其中发布基于文本的信息)

app.post(''/createGigListing'',FBAuth,res) => {
    const newGig = {
        venueName: req.user.venueName,name: req.body.name,time: req.body.time,price: req.body.price,genre: req.body.genre,tickets: req.body.tickets,date: req.body.date
    }
    db
    .collection(''gig-listing'')
    .add(newGig)
    .then(doc => {
        res.json({message: `document ${doc.id} created successfully`})
    })
    .catch(err =>{
        res.status(500).json({error: ''something went wrong''})
        console.error(err)
    })
})

最后,这是我要渲染到的组件:

import React from "react";
    import Header from "./Header";
    import TextField from "@material-ui/core/TextField";
    import Button from "@material-ui/core/Button";
    import axios from "axios";
    import * as firebase from ''firebase''
    import { auth } from ''firebase/app''
    
    class GigRegister extends React.Component {
      constructor() {
        super();
        this.state = {
          name: "",venue: "",time: "",date: "",genre: "",tickets: "",price: "",};
        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleChange = this.handleChange.bind(this);
      }
    
      handleChange(e) {
        this.setState({
          [e.target.name]: e.target.value,});
      }
    
      handleSubmit(e) {
        console.log("submit function reached");
        e.preventDefault();
        const gigData = {
          name: this.state.name,venue: this.state.venue,time: this.state.time,date: this.state.date,genre: this.state.genre,tickets: this.state.tickets,price: this.state.price,};
        
        
        auth().currentUser.getIdToken().then(function(token) {
          axios("http://localhost:5000/gig-fort/us-central1/api/createGigListing",{
            method: "POST",headers: {
              "content-type": "application/json","Authorization": "Bearer "+token,},data: gigData,})
      })
          .then((res) => {
            console.log(res);
            this.props.history.push(''/Homepage'')
          })
          .catch((err) => {
            console.error(err);
          });
      }
    
    
    
      render() {

        return (
          <div className="gig-register">
            <Header />
            <h1 className="header-gigReg">Register a gig</h1>
            <form onSubmit={this.handleSubmit}>
              <TextField
                placeholder="Event name"
                defaultValue="Event name"
                id="name"
                name="name"
                onChange={this.handleChange}
              />
              <TextField
                placeholder="Venue"
                defaultValue="Venue"
                id="venue"
                name="venue"
                onChange={this.handleChange}
              />
              <TextField
                placeholder="Time"
                defaultValue="Time"
                type="time"
                label="Enter start time"
                id="time"
                name="time"
                InputLabelProps={{
                  shrink: true,}}
                inputProps={{
                  step: 300,// 5 min
                }}
                onChange={this.handleChange}
              />
              <TextField
                id="date"
                label="Select date"
                type="date"
                defaultValue="2017-05-24"
                InputLabelProps={{
                  shrink: true,}}
                onChange={(e) => {
                  this.setState({ date: e.target.value });
                }}
              />
              <TextField
                placeholder="Genre"
                defaultValue="Genre"
                id="genre"
                name="genre"
                onChange={this.handleChange}
              />
              <TextField
                placeholder="Tickets"
                defaultValue="Tickets"
                id="tickets"
                name="tickets"
                onChange={this.handleChange}
              />
              <TextField
                placeholder="Price"
                defaultValue="Price"
                id="price"
                name="price"
                onChange={this.handleChange}
              />
              <Button type="submit">Submit</Button>
            </form>
          </div>
        );
      }
    }
    
    export default GigRegister

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Firebase获取当前用户uid

Firebase获取当前用户uid

您显示的代码仅适用于Firebase身份验证,该功能与其API根本没有任何关联,除了使用电话身份验证外。从documentation on pricing可以清楚地看出这一点。

,

不,与获取当前用户ID或电子邮件或任何种类的身份验证信息无关。 Firebase认证是完全免费的,电话认证除外。您可以通过电子邮件,Google,Microsoft等在Firebase身份验证中拥有无限数量的用户。

与读取操作有关的费用是针对Firestore的。它是与身份验证完全独立的“模块”。

关于无法在 Firebase Swift 中将数据附加到当前用户无法在此的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Firebase swift无法检索所有子值、Firebase 读取和保存数据问题 (Swift)、Firebase-React:如何呈现当前用户?、Firebase获取当前用户uid等相关知识的信息别忘了在本站进行查找喔。

本文标签: