আপনি কীভাবে ব্যবহারকারীর ফায়ার স্টোরে কোনও লেখক সম্পর্কিত ডিবি বিবরণ পাবেন?


10

আমি কীভাবে কোনও ব্যবহারকারীর নাম কীভাবে পাওয়া যায় যা কোনও ব্যবহারকারীর সংগ্রহে সংরক্ষিত একটি বৈশিষ্ট্য, যা ফায়ারবেস প্রমাণীকরণ মডেল দ্বারা নির্মিত বৈশিষ্ট্যের সাথে একত্রিত করা হয়েছে get

আমি লেখক ব্যবহারকারীর অ্যাক্সেস করতে পারি - যা আমাকে প্রমাণীকরণ সরঞ্জামে সীমাবদ্ধ ক্ষেত্রগুলিতে ফায়ারবেস সংগ্রহ করে এবং তারপরে আমি সেখান থেকে সম্পর্কিত ব্যবহারকারী সংগ্রহের দিকে যাবার চেষ্টা করছি (যা একই ইউআইডি ব্যবহার করে)।

আমার সাথে প্রতিক্রিয়া প্রসঙ্গে ভোক্তা রয়েছে:

import React from 'react';
const AuthUserContext = React.createContext(null);
export default AuthUserContext;

তারপরে আমার উপাদানটিতে আমি ব্যবহার করার চেষ্টা করছি:

const Test = () => (

<AuthUserContext.Consumer>
    {authUser => (

    <div>
            {authUser.email} // I can access the attributes in the authentication collection 
            {authUser.uid.user.name} //i cannot find a way to get the details in the related user collection document - where the uid on the collection is the same as the uid on the authentication table


     </div>
    )}
</AuthUserContext.Consumer>
);

const condition = authUser => !!authUser;
export default compose(
withEmailVerification,
withAuthorization(condition),
)(Test);

আমার ফায়ারবেস.জেজে - আমি মনে করি যে আমি প্রমাণীকরণ মডেল থেকে লেখক ব্যবহারকারীর বৈশিষ্ট্যগুলি ব্যবহারকারীর সংগ্রহের বৈশিষ্ট্যগুলির সাথে একীভূত করার চেষ্টা করেছি:

class Firebase {
  constructor() {
    app.initializeApp(config).firestore();
    /* helpers */
    this.fieldValue = app.firestore.FieldValue;


    /* Firebase APIs */
    this.auth = app.auth();
    this.db = app.firestore();

onAuthUserListener = (next, fallback) =>
    this.auth.onAuthStateChanged(authUser => {
      if (authUser) {
        this.user(authUser.uid)
          .get()
          .then(snapshot => {
            const dbUser = snapshot.data();
            // default empty roles
            if (!dbUser.roles) {
              dbUser.roles = {};
            }
            // merge auth and db user
            authUser = {
              uid: authUser.uid,
              email: authUser.email,
              emailVerified: authUser.emailVerified,
              providerData: authUser.providerData,
              ...dbUser,
            };
            next(authUser);
          });
      } else {
        fallback();
      }
    });

প্রমাণীকরণ সংগ্রহ থেকে একই ইউড সহ একটি আইডি রয়েছে এমন ব্যবহারকারীর সংকলনে - আমি লেখকটির (যা প্রমাণীকরণের বৈশিষ্ট্যগুলিতে আমাকে পাওয়ার জন্য কাজ করে) থেকে কোনও উপায় খুঁজে পাচ্ছি না।

আমি এই পোস্টটি দেখেছি , যা একই সমস্যা বলে মনে হচ্ছে এবং উত্তরটি কী ইঙ্গিত করছে বলে কাজ করার চেষ্টা করেছিল - তবে আমি এমন কোনও উপায় খুঁজে পাচ্ছি না যা প্রমাণীকরণ সংগ্রহ থেকে ব্যবহারকারী সংগ্রহের দিকে যাওয়ার জন্য কাজ করে এবং আমি জানি না যে এটি সংযুক্তি আমার জন্য কী করছে তা যদি এটি আমাকে লেখক থেকে ব্যবহারকারী সংগ্রহের বৈশিষ্ট্যগুলিতে অ্যাক্সেস না দেয়।

আমি আমার ফায়ারবেস.জেএস-তে কোনও সহায়ককে একটি ইউআইডি থেকে একজন ব্যবহারকারী দেওয়ার জন্য চেষ্টা করেছি - তবে এটির সাহায্যও মনে হয় না।

user = uid => this.db.doc(`users/${uid}`);
  users = () => this.db.collection('users');

পরবর্তী প্রচেষ্টা

আরও পটভূমি যুক্ত করতে, আমি একটি পরীক্ষার উপাদান তৈরি করেছি যা লেখক ব্যবহারকারীকে লগ (তবে রেন্ডার নয়) করতে পারে:

import React, { Component } from 'react';
import { withFirebase } from '../Firebase/Index';
import { Button, Layout  } from 'antd';

import { AuthUserContext, withAuthorization, withEmailVerification } from '../Session/Index';


class Test extends Component {
  constructor(props) {
    super(props);

    this.state = {
      loading: false,
      user: null,
      ...props.location.state,
    };
  }

  componentDidMount() {
    if (this.state.user) {
      return;
    }

    this.setState({ loading: true });

    // this.unsubscribe = this.props.firebase
    //   .user(authUser.uid)
    //   .onSnapshot(snapshot => {
    //     const userData = snapshot.data();  
    //     console.log(userData);
    //     this.setState({
    //       user: snapshot.data(),
    //       loading: false,
    //     });
    //   });
  }

  componentWillUnmount() {
    this.unsubscribe && this.unsubscribe();
  }



  render() {
    const { user, loading } = this.state;


    return (
        <div>
        <AuthUserContext.Consumer>
        {authUser => (
            console.log(authUser),
            <p>
                </p>


            )}
            </AuthUserContext.Consumer> 

        </div>

    );

    };
}
export default Test;

লগটি লগগুলিতে ইউইডি, ইমেল ইত্যাদির বিশদ প্রদর্শন করে তবে এটি আইটেমের দীর্ঘ তালিকার মধ্যে রয়েছে - যার অনেকগুলিই 1 বা 2 বর্ণের সাথে সংযুক্ত থাকে (এই প্রিফিক্সটির প্রতিটি কী কী তা জানতে কোনও কী খুঁজে পাচ্ছি না) অক্ষর মানে)। নীচে উত্তোলিত উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

এই মন্তব্য আপডেট করুন:

পূর্বে, আমি বলেছিলাম: ইউআইডি, ইমেল ইত্যাদির ক্ষেত্রগুলি এই উপসর্গগুলির নীচে নেস্টেড বলে মনে হয় না, তবে যদি আমি চেষ্টা করি:

 console.log(authUser.email)

, আমি একটি ত্রুটি পেয়েছি যা বলে:

প্রকারের ত্রুটি: নালীর সম্পত্তি 'ইমেল' পড়তে পারে না

আপডেট: আমি ঠিক বুঝতে পেরেছি যে কনসোল লগে আমাকে লেবেলযুক্ত একটি ড্রপ ডাউন মেনু প্রসারিত করতে হবে:

Q {I: অ্যারে (0), l:

ইমেল বৈশিষ্ট্য দেখতে। কেউ কি জানে যে এই জিব্বারটি কিসের ইঙ্গিত দেয়? প্রমাণীকরণের টেবিলের প্রাসঙ্গিক বৈশিষ্ট্যগুলি পেতে এই বিষয়গুলি উল্লেখ করার কথা ছিল কিনা তা জানতে Q, I বা l এর অর্থ কী তা বোঝার জন্য আমি কোনও কী খুঁজে পাচ্ছি না। হতে পারে যদি আমি তা বুঝতে পারি - প্রমাণীকরণ সংগ্রহ থেকে uid ব্যবহার করে ব্যবহারকারী সংগ্রহের জন্য আমি কোনও উপায় খুঁজে পেতে পারি।

বর্তমান ব্যবহারকারী কে তা খুঁজে পাওয়ার জন্য প্রসঙ্গ ভোক্তার সাথে কি কেউ সামনের প্রান্তে প্রতিক্রিয়া ব্যবহার করেছে? যদি তা হয় তবে আপনি কীভাবে প্রমাণীকরণ মডেলটিতে তাদের বৈশিষ্ট্যগুলি অ্যাক্সেস করবেন এবং কীভাবে সম্পর্কিত ব্যবহারকারী সংগ্রহের বৈশিষ্ট্যগুলিতে অ্যাক্সেস করবেন (যেখানে ব্যবহারকারীর নথিতে ডকআইডি প্রমাণীকরণের টেবিল থেকে uid)?

পরবর্তী মনোযোগ

পরবর্তী প্রচেষ্টা একটি খুব অদ্ভুত ফলাফল এনেছে।

আমার 2 টি পৃথক পৃষ্ঠা রয়েছে যা প্রসঙ্গ ভোক্তা। তাদের মধ্যে পার্থক্য হ'ল একটি ফাংশন এবং অন্যটি একটি শ্রেণি উপাদান।

ফাংশন উপাদানটিতে, আমি {authUser.email nder রেন্ডার করতে পারি} আমি যখন ক্লাসের উপাদানগুলিতে একই জিনিসটি করার চেষ্টা করি তখন আমি একটি ত্রুটি পাই যা বলে:

প্রকারের ত্রুটি: নালীর সম্পত্তি 'ইমেল' পড়তে পারে না

এই ত্রুটিটি একই সেশন থেকে একই লগইন করা ব্যবহারকারীর সাথে আসছে।

দ্রষ্টব্য: ফায়ারবেস ডকুমেন্টেশনে যখন বলা হয়েছে যে বর্তমানের ব্যবহারকারীর সম্পত্তি প্রমাণীতে পাওয়া যায় - আমি এটিকে মোটেই কাজ করতে পারিনি।

আমার ফাংশন উপাদানটি রয়েছে:

import React from 'react';
import { Link } from 'react-router-dom';
import { compose } from 'recompose';
import { AuthUserContext, withAuthorization, withEmailVerification } from '../Session/Index';


const Account = () => (

<AuthUserContext.Consumer>
    {authUser => (
    <div>
         {authUser.email}
    </div>
    )}
</AuthUserContext.Consumer>
);

// const condition = authUser => !!authUser;
// export default compose(
// withEmailVerification,
// withAuthorization(condition),
// )(Account);
export default Account;

যদিও আমি ব্যবহারকারীর সংগ্রহের বৈশিষ্ট্যগুলিতে পৌঁছাতে পারছি না যেখানে ব্যবহারকারীর নথিতে ডকআইডি প্রামাণিক ব্যবহারকারীর ইউআইডের সমান, এই উপাদানটি থেকে আমি এই ব্যবহারকারীর পক্ষে লেখক সংকলনে ইমেল বৈশিষ্ট্য আউটপুট করতে পারি।

যদিও Firebase ডকুমেন্টেশন ব্যবহারকারীদের পরিচালনা এবং এখানে বৈশিষ্ট্য অ্যাক্সেস করার জন্য এই পরামর্শটি সরবরাহ করে, আমি প্রতিক্রিয়া হিসাবে এই পদ্ধতির প্রয়োগ করার কোনও উপায় পাইনি। উভয়ই আমার ফায়ারবেস.জেএস-এ সাহায্যকারী তৈরি করে এবং কোনও উপাদানটিতে স্ক্র্যাচ থেকে শুরু করার চেষ্টা করে এটি করার চেষ্টা করার প্রতিটি প্রকারভেদ ফায়ারবেস অ্যাক্সেসে ত্রুটি তৈরি করে। তবে আমি ব্যবহারকারীর একটি তালিকা এবং তাদের সম্পর্কিত ব্যবহারকারী সংগ্রহের তথ্য তৈরি করতে পারি (লেখক ব্যবহারকারী যার উপর ভিত্তি করে আমি কোনও ব্যবহারকারী পেতে পারি না)।

আমার শ্রেণীর উপাদানটি রয়েছে:

import React from 'react';
import {
    BrowserRouter as Router,
    Route,
    Link,
    Switch,

  } from 'react-router-dom';
import * as ROUTES from '../../constants/Routes';
import { compose } from 'recompose';
import { withFirebase } from '../Firebase/Index';
import { AuthUserContext, withAuthorization, withEmailVerification } from '../Session/Index';



class Dashboard extends React.Component {
  state = {
    collapsed: false,
  };

  onCollapse = collapsed => {
    console.log(collapsed);
    this.setState({ collapsed });
  };

  render() {
    const {  loading } = this.state;
    // const dbUser = this.props.firebase.app.snapshot.data();
    // const user = Firebase.auth().currentUser;
    return (
    <AuthUserContext.Consumer>
      {authUser => (  

        <div>    
         {authUser.email} // error message as shown above
          {console.log(authUser)} // output logged in amongst a long list of menus prefixed with either 1 or 2 characters. I can't find a key to decipher what these menus mean or do.
        </div>
      )}
    </AuthUserContext.Consumer>  
    );
  }
}

//export default withFirebase(Dashboard);
export default Dashboard;

আমার AuthContext.Provider এ - আমার আছে:

import React from 'react';
import { AuthUserContext } from '../Session/Index';
import { withFirebase } from '../Firebase/Index';
const withAuthentication = Component => {
  class WithAuthentication extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        authUser: null,
      };  
    }

    componentDidMount() {
      this.listener = this.props.firebase.auth.onAuthStateChanged(
        authUser => {
          authUser
            ? this.setState({ authUser })
            : this.setState({ authUser: null });
        },
      );
    }

    componentWillUnmount() {
      this.listener();
    };  

    render() {
      return (
        <AuthUserContext.Provider value={this.state.authUser}>
          <Component {...this.props} />
        </AuthUserContext.Provider>
      );
    }
  }
  return withFirebase(WithAuthentication);

};
export default withAuthentication;

পরবর্তী মনোযোগ

সত্যিই আশ্চর্যজনক যে এই প্রয়াসের সাথে, আমি যে মানগুলিকে আমি দেখতে পাচ্ছি তা লগইন করার চেষ্টা করছি ডাটাবেসে এবং নামের মানটি 'অপরিজ্ঞাত' হিসাবে ফিরিয়ে দেওয়া হচ্ছে যেখানে ডিবিতে একটি স্ট্রিং রয়েছে।

এই প্রয়াসটি রয়েছে:

    import React from 'react';
    import {
        BrowserRouter as Router,
        Route,
        Link,
        Switch,
        useRouteMatch,
     } from 'react-router-dom';
    import * as ROUTES from '../../constants/Routes';
    import { compose } from 'recompose';
    import { withFirebase } from '../Firebase/Index';
    import { AuthUserContext, withAuthorization, withEmailVerification } from '../Session/Index';



    class Dash extends React.Component {
      // state = {
      //   collapsed: false,
      // };

      constructor(props) {
        super(props);

        this.state = {
          collapsed: false,
          loading: false,
          user: null,
          ...props.location.state,
        };
      }
      componentDidMount() {
        if (this.state.user) {
          return;
        }

        this.setState({ loading: true });

        this.unsubscribe = this.props.firebase
          .user(this.props.match.params.id)
          // .user(this.props.user.uid)
          // .user(authUser.uid)
          // .user(authUser.id)
          // .user(Firebase.auth().currentUser.id)
          // .user(Firebase.auth().currentUser.uid)

          .onSnapshot(snapshot => {
            this.setState({
              user: snapshot.data(),
              loading: false,
            });
          });
      }

      componentWillUnmount() {
        this.unsubscribe && this.unsubscribe();
      }


      onCollapse = collapsed => {
        console.log(collapsed);
        this.setState({ collapsed });
      };

      render() {
        // const {  loading } = this.state;
        const { user, loading } = this.state;
        // let match = useRouteMatch();
        // const dbUser = this.props.firebase.app.snapshot.data();
        // const user = Firebase.auth().currentUser;
        return (
        <AuthUserContext.Consumer>
          {authUser => (  

            <div>    
            {loading && <div>Loading ...</div>}

                <Layout style={{ minHeight: '100vh' }}>
                  <Sider collapsible collapsed={this.state.collapsed} onCollapse={this.onCollapse}>
                    <div  />

                  </Sider>
                <Layout>

                    <Header>
                    {console.log("authUser:", authUser)}
                    // this log returns the big long list of outputs - the screen shot posted above is an extract. It includes the correct Authentication table (collection) attributes
                    {console.log("authUser uid:", authUser.uid)}
                    // this log returns the correct uid of the current logged in user
                    {console.log("Current User:", this.props.firebase.auth.currentUser.uid)}
// this log returns the correct uid of the current logged in user
                    {console.log("current user:", this.props.firebase.db.collection("users").doc(this.props.firebase.auth.currentUser.uid
                    ))}
// this log returns a big long list of things under a heading: DocumentReference {_key: DocumentKey, firestore: Firestore, _firestoreClient: FirestoreClient}. One of the attributes is: id: (...) (I can't click to expand this).
                    {console.log("current user:", this.props.firebase.db.collection("users").doc(this.props.firebase.auth.currentUser.uid
                    ).name)}
//this log returns: undefined. There is an attribute in my user document called 'name'. It has a string value on the document with the id which is the same as the currentUser.uid.
                    <Text style={{ float: 'right', color: "#fff"}}>

                      {user && (
                        <Text style={{ color: "#fff"}}>{user.name}
//this just gets skipped over in the output. No error but also does not return the name.
</Text>


                      )}

                    </Text>
                    </Header>      
                   </Layout>
                </Layout>

            </div>
          )}
        </AuthUserContext.Consumer>  
        );
      }
    }

    export default withFirebase(Dash);

পরবর্তী মনোযোগ

সুতরাং এই প্রচেষ্টাটি আনাড়ি এবং সাহায্যকারী বা স্ন্যাপশট ক্যোয়ারী যা আমি উপরে ব্যবহার করার চেষ্টা করেছি সেগুলি ব্যবহার করে না, তবে কনসোলে ব্যবহারকারী সংগ্রহ নথি বৈশিষ্ট্যগুলি লগইন করুন:

{this.props.firebase.db.colલેક્શન ('ব্যবহারকারী')। ডক (authUser.uid) .get ()

      .then(doc => {
          console.log(doc.data().name) 
      })

    } 

আমি যা করতে পারি না তা হ'ল নামটি জেএসএক্সে রেন্ডার করার একটি উপায় খুঁজে পাওয়া

আপনি কীভাবে আউটপুট প্রিন্ট করবেন?

আমি যখন চেষ্টা করি:

{ 


this.props.firebase.db.collection('users').doc(authUser.uid).get().data().name

                }

আমি একটি ত্রুটি পেয়েছি যা বলে:

TypeError: this.prop.firebase.db.colલેક્શન (...)। ডক (...)। পান (...)। ডেটা কোনও ফাংশন নয়

আমি যখন চেষ্টা করি:

{ 



this.props.firebase.db.collection('users').doc(authUser.uid).get()
              .then(doc => {
                  console.log(doc.data().name), 
                  <p>doc.data().name</p>
              })
            } 

আমি একটি ত্রুটি পেয়েছি যা বলে:

লাইন 281: 23: একটি অ্যাসাইনমেন্ট বা ফাংশন কল প্রত্যাশিত এবং পরিবর্তে একটি অভিব্যক্তি অ-অব্যবহৃত-এক্সপ্রেশন দেখেছি saw

আমি যখন চেষ্টা করি:

{ 


this.props.firebase.db.collection('users').doc(authUser.uid).get("name")
              .then(doc => {
                  console.log(doc.data().name), 
                  <p>doc.data().name</p>
              })
            }

ত্রুটি বার্তাটি বলে:

একটি অ্যাসাইনমেন্ট বা ফাংশন কল প্রত্যাশিত এবং পরিবর্তে একটি অভিব্যক্তি দেখেছি

আমি কীভাবে স্ন্যাপশট ক্যোয়ারীগুলি কাজ করতে পারি তা জানার চেষ্টা করতে ছাড়তে প্রস্তুত - যদি আমি কেবল স্ক্রিনে রেন্ডার করার জন্য ব্যবহারকারী সংগ্রহের নাম পেতে পারি। কেউ কি এই পদক্ষেপে সাহায্য করতে পারে?

পরবর্তী মনোযোগ

আমি এই পোস্ট পেয়েছি । কী ঘটতে হবে তার এটির একটি ভাল ব্যাখ্যা রয়েছে তবে আমি এটি প্রদর্শিত হিসাবে বাস্তবায়ন করতে পারছি না কারণ কম্পোনেন্টডিডমাউন্ট লেখক কী তা জানেন না।

আমার বর্তমান প্রচেষ্টা নিম্নরূপ - যদিও বর্তমানে লিখিত আছে, authUser হ'ল রিটার্ন মানটির একটি মোড়ক - এবং উপাদান-ডিডমাউন্ট সেগমেন্টটি জানেন না যে লেখকটি কী।

import React from 'react';
import {
    BrowserRouter as Router,
    Route,
    Link,
    Switch,
    useRouteMatch,
 } from 'react-router-dom';
import * as ROUTES from '../../constants/Routes';
import { compose } from 'recompose';
import { Divider, Layout, Card, Tabs, Typography, Menu, Breadcrumb, Icon } from 'antd';
import { withFirebase } from '../Firebase/Index';
import { AuthUserContext, withAuthorization, withEmailVerification } from '../Session/Index';




const { Title, Text } = Typography
const { TabPane } = Tabs;
const { Header, Content, Footer, Sider } = Layout;
const { SubMenu } = Menu;


class Dashboard extends React.Component {
  // state = {
  //   collapsed: false,
  //   loading: false,
  // };

  constructor(props) {
    super(props);

    this.state = {
      collapsed: false,
      loading: false,
      user: null,
      ...props.location.state,
    };
  }
  componentDidMount() {
    if (this.state.user) {
      return;
    }

    this.setState({ loading: true });

    this.unsubscribe = this.props.firebase
      .user(this.props.match.params.id)
      .onSnapshot(snapshot => {
        this.setState({
          user: snapshot.data(),
          loading: false,
        });
      });
  // }

//   firebase.firestore().collection("users")
//     .doc(this.state.uid)
//     .get()
//     .then(doc => {
//       this.setState({ post_user_name: doc.data().name });
//   });
// }

  this.props.firebase.db
    .collection('users')
    .doc(authUser.uid)
    .get()
    .then(doc => {
        this.setState({ user_name: doc.data().name });
        // loading: false,
      });  
    }                  

  componentWillUnmount() {
    this.unsubscribe && this.unsubscribe();
  }


  onCollapse = collapsed => {
    console.log(collapsed);
    this.setState({ collapsed });
  };

  render() {
    // const {  loading } = this.state;
    // const { user, loading } = this.state;
    // let match = useRouteMatch();
    // const dbUser = this.props.firebase.app.snapshot.data();
    // const user = Firebase.auth().currentUser;


    return (
    <AuthUserContext.Consumer>
      { authUser => (  

        <div>    

                <Header>

                 {/* 
                    { 
                    this.props.firebase.db.collection('users').doc(authUser.uid).get()
                    .then(doc => {
                        console.log( doc.data().name
)                          
                    })
                  } 
                  */} 


                  </Text>
                </Header>      

                      <Switch>

                      </Switch>    

        </div>
      )}
    </AuthUserContext.Consumer>  
    );
  }
}

export default withFirebase(Dashboard);

পরবর্তী মনোযোগ

এরপরে, আমি আউথকন্টেক্সট-এর ভিতরে ড্যাশবোর্ডের জন্য রুটটি মোড়ানোর চেষ্টা করেছি ons কনসুমার যাতে পুরো উপাদানটি এটি ব্যবহার করতে পারে - এর ফলে আমাকে উপাদানটিডমাউন্ট ফাংশনে লগ ইন করা ব্যবহারকারীকে অ্যাক্সেস করতে দেয়।

আমি রুটটি এতে পরিবর্তন করেছি:

<Route path={ROUTES.DASHBOARD} render={props => (
          <AuthUserContext.Consumer>
             { authUser => ( 
                <Dashboard authUser={authUser} {...props} />  
             )}
          </AuthUserContext.Consumer>
        )} />

এবং ড্যাশবোর্ড উপাদান রেন্ডার স্টেটমেন্ট থেকে গ্রাহককে সরান।

তারপরে ড্যাশবোর্ডের উপাদানটিতে থাকা ডিডমাউন্টে আমি চেষ্টা করেছি:

componentDidMount() {
    if (this.state.user) {
      return;
    }

    this.setState({ loading: true });

     this.unsubscribe =
     this.props.firebase.db
     .collection('users')
   //.doc(this.props.firebase.db.collection('users').doc(this.props.firebase.authUser.uid))
 .doc(this.props.firebase.db.collection('users').doc(this.props.authUser.uid))
     .get()
     .then(doc => {
         this.setState({ name: doc.data().name });
       loading: false,
      });  
  }                  

আমি যখন এটি চেষ্টা করি তখন আমি একটি ত্রুটি পাই যা বলে:

ফায়ারবাসেরর: ফাংশন কালেকশন রেফারেন্স.ডোক () এর প্রথম আর্গুমেন্টটি খালি খালি স্ট্রিং টাইপের হওয়া দরকার তবে এটি ছিল: একটি কাস্টম ডকুমেন্টের রেফারেন্স অবজেক্ট

নেক্সট এটেম্পট নীচের লোকেরা প্রথম প্রস্তাবিত সমাধানটিতে সহায়ক কিছু খুঁজে পেয়েছেন বলে মনে হয়। আমি এতে দরকারী কিছু খুঁজে পাচ্ছি না, তবে এর পরামর্শগুলি আবার পড়ছি, ফায়ারবেস ডকুমেন্টেশনের উদাহরণটি কীভাবে (এটি .doc () অনুরোধটিকে ইউডি মান দিতে হবে তা প্রকাশ করে না তা দেখার জন্য আমি লড়াই করে যাচ্ছি ) যা নিম্নরূপ:

db.collection("cities").doc("SF");

  docRef.get().then(function(doc) {
      if (doc.exists) {
          console.log("Document data:", doc.data());
      } else {
          // doc.data() will be undefined in this case
          console.log("No such document!");
      }

কম্পোনেন্টডিডমাউন্ট ফাংশনে আমার প্রচেষ্টার থেকে মৌলিকভাবে পৃথক, যা হ'ল:

this.unsubscribe =
  this.props.firebase.db
    .collection('users')
    // .doc(this.props.firebase.db.collection('users').doc(this.props.firebase.authUser.uid))
    // .doc(this.props.firebase.db.collection('users').uid: this.props.firebase.auth().currentUser.uid  )
    .doc(this.props.authUser.uid)
    .get()
    .then(doc => {
        this.setState({ user.name: doc.data().name });
        // loading: false,
      }else {
        // doc.data() will be undefined in this case
        console.log("Can't find this record");
      }

    );  
  }

হয়তো সেই পদক্ষেপটি সমাধান করা একটি সূত্র যা এটিকে কোনও ফলাফলের দিকে নিয়ে যেতে সহায়তা করবে। লগ-ইন থাকা ব্যবহারকারী শ্রোতার uid ব্যবহার করে কীভাবে কোনও ব্যবহারকারী সংগ্রহের রেকর্ড পাবেন তা দেখানোর জন্য যে কেউ ফায়ার স্টোর ডকুমেন্টেশন পেতে পারেন?

সে লক্ষ্যে আমি ফ্রেন্ডলি ইটস কোড ল্যাব উদাহরণ থেকে দেখতে পাচ্ছি যে কোডটিতে আইডি অনুসন্ধান মানকে একটি ডক.ইড দেওয়ার চেষ্টা রয়েছে। আমি জানি না এই কোডটি কোন ভাষায় লিখিত হয়েছে - তবে এটি আমি যা করার চেষ্টা করছি তার সাথে এটির মতো দেখাচ্ছে - আমি কেবল উদাহরণটি থেকে এমন কিছুতে কীভাবে সরিয়ে যেতে পারি যা আমি জানি যে কীভাবে কাজ করতে হয়।

display: function(doc) {
      var data = doc.data();
      data['.id'] = doc.id;
      data['go_to_restaurant'] = function() {
        that.router.navigate('/restaurants/' + doc.id);
      };

FYI আপনার পরিভাষাটি একেবারেই সঠিক নয়, এবং এই প্রশ্নটি পড়তে অসুবিধে করছে। ফায়ারবেসে "টেবিল" বলে কিছু নেই। ফায়ারবেস আথে, কেবল ব্যবহারকারী রয়েছেন - কোনও "প্রমাণীকরণের টেবিল" নেই। ফায়ার স্টোরে, সংগ্রহগুলি এবং সেই সংগ্রহগুলির মধ্যে দস্তাবেজগুলি রয়েছে তবে কোনও টেবিল নেই। আপনি কোথায় আটকে যাচ্ছেন এবং কীভাবে আপনি দেখিয়েছেন কোডটি আপনি যেভাবে প্রত্যাশা করেন সেভাবে কার্যকর হয় না তা বোঝার চেষ্টা করছি, তবে আমি কেবল এটি একসাথে পাইক করছি না। আপনি দস্তাবেজগুলি খুঁজে পেতে চাইলে আরও স্ট্যান্ডার্ড পরিভাষা ব্যবহার করার জন্য প্রশ্নটি সম্পাদনা করার বিষয়টি বিবেচনা করুন এবং আপনার প্রত্যাশা অনুযায়ী কী কাজ করছে না সে সম্পর্কে আরও পরিষ্কার হন।
ডগ স্টিভেনসন

সূক্ষ্ম - সংগ্রহের জন্য টেবিলের বিকল্পটি খুশি। বিষয়টি এখনও একইরকম।
মেল

আমার মূল বক্তব্যটি হ'ল আমি সত্যিই আপনার পয়েন্টটি পেতে পারি নি, এবং পরিভাষাটি কোনও উপকারে আসেনি। আপনি যে কোডটি দেখিয়েছেন তাতে কী কাজ করে না তা আপনি আরও বিশদে ব্যাখ্যা করতে পারেন? প্রত্যাশার মতো কিছু কাজ করলো না? কোন ত্রুটি বা ডিবাগ লগ চিত্রিত করতে?
ডগ স্টিভেনসন

কিছুই কাজ করে না। আমি লেখক ব্যবহারকারী শ্রোতার কাছ থেকে ব্যবহারকারীর সংগ্রহের বিশদটি অ্যাক্সেসের জন্য কোনও উপায় খুঁজে পাওয়ার প্রত্যাশা করছি। authUser প্রসঙ্গ হ্যান্ডলার এবং সম্পর্কিত শ্রেণি পদ্ধতিতে সংজ্ঞায়িত করা হয় যা পদ্ধতিতে পরিবর্তনগুলির জন্য শোনেন। আমি প্রমাণীকরণ সংগ্রহের বৈশিষ্ট্যগুলি পেরে উঠতে পারি না - আমি ফায়ার স্টোরে সম্পর্কিত ব্যবহারকারী সংগ্রহের অ্যাক্সেস পাওয়ার চেষ্টা করছি। কোনও লগ নেই। কেবল ত্রুটি বার্তাগুলি যা বলছে ক্ষেত্রটি অপরিজ্ঞাত।
মেল

1
আমি একটি সহজ কাজ দিয়ে শুরু করার পরামর্শ দিচ্ছি, কিছু অভিজ্ঞতা অর্জনের জন্য এটি কাজ করুন, তারপরে আপনার এখনকার মতো আরও জটিল সমস্যার ক্ষেত্রে এটি প্রয়োগ করুন। ডকুমেন্টেশন সম্পর্কে মৌলিকভাবে ভুল কিছু নেই (আমি জানি, কারণ আমি এটি সর্বদা ব্যবহার করি এবং আমি একই লোকদের সাহায্য করি)। স্ট্যাক ওভারফ্লোতে সহায়তা পেতে, আপনাকে একটি নির্দিষ্ট সমস্যা, আদর্শভাবে একটি এমসিভিই চিত্রিত করতে হবে যা যে কেউ সমস্যাটি পুনরুত্পাদন করতে ব্যবহার করতে পারে। শুধু "আমি এটি কাজ করতে পারি না" বলাই যথেষ্ট নয়। stackoverflow.com/help/minimal-reproducible- উদাহরণ
ডগ স্টিভেনসন

উত্তর:


5

আমি আপনার প্রশ্নের শেষ পংক্তি ( users = () => this.db.collection('users');) থেকে বুঝতে পারি যে আপনি যেখানে ব্যবহারকারীদের উপর অতিরিক্ত তথ্য সঞ্চয় করেন সেই সংগ্রহটি বলা হয় usersএবং এই সংগ্রহে থাকা কোনও ব্যবহারকারী নথি ইউজারআইডি (ইউআইডি) কে ডকআইডি হিসাবে ব্যবহার করে।

নিম্নলিখিতটি কৌতুকটি করতে হবে (অরক্ষিত):

class Firebase {
  constructor() {
    app.initializeApp(config).firestore();
    /* helpers */
    this.fieldValue = app.firestore.FieldValue;


    /* Firebase APIs */
    this.auth = app.auth();
    this.db = app.firestore();

onAuthUserListener = (next, fallback) =>
    this.auth.onAuthStateChanged(authUser => {
      if (authUser) {
           this.db.collection('users').doc(authUser.uid)
              .get()
              .then(snapshot => {
                const userData = snapshot.data();
                console.log(userData);
                //Do whatever you need with userData
                //i.e. merging it with authUser
                //......

                next(authUser);
          });
      } else {
        fallback();
      }
    });

সুতরাং, onAuthStateChanged()পদ্ধতির মাধ্যমে নির্ধারিত পর্যবেক্ষকের মধ্যে , যখন আমরা সনাক্ত করেছি যে ব্যবহারকারী সাইন ইন করেছেন (অর্থাত্ ইন if (authUser) {}), তখন আমরা সংগ্রহটিতে uidএই ব্যবহারকারীর সাথে সম্পর্কিত অনন্য ডকুমেন্টটি জিজ্ঞাসা করতে এটি ব্যবহার করি users( একটি নথি পড়ুন এবং দস্তাবেজের ডকটি দেখুন get()পদ্ধতি)।


সুতরাং আমি অফলারলিস্টনারকে আমি যেভাবে সংজ্ঞায়িত করেছি তাতে কিছু ভুল আছে? তারপরে যদি আমি সেই পদ্ধতিতে আপনার সংশোধনীগুলি চেষ্টা করি তবে লেখক ব্যবহারকারীর কাছ থেকে ব্যবহারকারী সংগ্রহের জন্য আমি কী করব?
মেল

"সুতরাং আমি যেভাবে অটোজারলিস্টনারকে সংজ্ঞায়িত করেছি তাতে কিছু ভুল আছে?" -> আমি যা দেখতে পাচ্ছি তা থেকে নয়। "লেখক ব্যবহারকারীর কাছ থেকে ব্যবহারকারী সংগ্রহের জন্য আমার কী করা উচিত?" -> আমি সঠিকভাবে বুঝতে পারলে আপনি সংগ্রহটি নয়, একটি নথি পেতে চান। উত্তরে কোডটি কাজ করা উচিত।
রেনেউদ তারেক

আমি লেখক পেতে চাই - আপনার কোডটি কি আমার প্রয়াসের উন্নতি? আমি একইভাবে ইউআইডি থাকা ব্যবহারকারী সংগ্রহের অ্যাক্সেস দেওয়ার জন্য লেখককে পাওয়ার জন্য কাজ করার মতো কোনও উপায় খুঁজে পাচ্ছি না। আমি আপনার কোড পরামর্শটি বোঝার চেষ্টা করছি - এটি প্রথম পদক্ষেপ হিসাবে কীভাবে আমার উপর উন্নতি করে। দয়া করে আপনি এটির কোনটি উন্নতি / সংশোধন করতে পারেন? আপনাকে ধন্যবাদ
মেল

কি করলে কি হয় this.auth.onAuthStateChanged(authUser => { if (authUser) {console.log(authUser.uid) })?
রেনেউদ তারেক

আমি সমস্ত লেখক ব্যবহারকারীর বৈশিষ্ট্য (প্রমাণীকরণ সংগ্রহের ডেটা) আউটপুট করতে পারি। আইডি হিসাবে ইউআইডি রয়েছে এমন ব্যবহারকারীর সংগ্রহে সম্পর্কিত নথি থেকে আমি ব্যবহারকারীর ডেটা পেতে পারি না
মেল

1

আমার একটি তত্ত্ব আছে যা আমি আপনাকে পরীক্ষা করতে চাই।

আমি মনে করি আপনি যখন next(authUser)আপনার onAuthStateChangedহ্যান্ডলারের অভ্যন্তরে কল করবেন তখন এটি কার্যকর করার সময় এটির একটি ত্রুটির মুখোমুখি হয় (যেমন cannot read property 'name' of undefined at ...)।

আপনার কোডটি প্রত্যাশিতভাবে কাজ না করার কারণটি যেখানে আপনি কল করেছেন next(authUser) এটি then()একটি প্রতিশ্রুতির শৃঙ্খলের অভ্যন্তরে। কোনও প্রতিশ্রুতির ভিতরে ফেলে দেওয়া কোনও ত্রুটি ধরা পড়বে এবং প্রতিশ্রুতি প্রত্যাখাত হওয়ার কারণ হবে। যখন কোনও প্রতিশ্রুতি প্রত্যাখ্যান করা হয়, এটি ত্রুটির সাথে এটি সংযুক্ত ত্রুটি হ্যান্ডলারদের বলবে। প্রশ্নে প্রতিশ্রুতি শৃঙ্খলে বর্তমানে এরকম কোনও ত্রুটি হ্যান্ডলার নেই।

যদি আমি আপনাকে হারিয়ে ফেলেছি তবে এই ব্লগ পোস্টটি পড়ুন তবে প্রতিশ্রুতি ক্র্যাশ কোর্সের জন্য এবং তারপরে ফিরে আসুন।

তাহলে এরকম পরিস্থিতি এড়াতে আমরা কী করতে পারি? সবচেয়ে সহজ হ'ল প্রতিশ্রুতি হ্যান্ডলারের সুযোগের next(authUser) বাইরে কল করা then()। আমরা এটি ব্যবহার করে করতে পারিwindow.setTimeout(function)

সুতরাং আপনার কোড, আপনি প্রতিস্থাপন করতে হবে

next(authUser)

সঙ্গে

setTimeout(() => next(authUser))
// or setTimeout(() => next(authUser), 0) for the same result

এটি প্রতিশ্রুতি শৃঙ্খলে ধরা পড়ার চেয়ে স্বাভাবিক হিসাবে যে কোনও ত্রুটি ফেলবে।

গুরুত্বপূর্ণভাবে, userDocRef.get()ব্যর্থ হওয়ার পরে হ্যান্ডল করে এমন কোনও ক্যাচ হ্যান্ডলার আপনি পান নি । সুতরাং শুধু .catch(() => setTimeout(fallback))শেষে যুক্ত করুনthen() যাতে আপনার কোডটি যদি ত্রুটি থেকে যায় তবে ফ্যালব্যাক পদ্ধতিটি ব্যবহার করে।

সুতরাং আমরা এখানে দিয়ে শেষ:

this.user(authUser.uid)
  .get()
  .then(snapshot => {
    const dbUser = snapshot.data();
    // default empty roles
    if (!dbUser.roles) {
      dbUser.roles = {};
    }
    // merge auth and db user
    authUser = {
      ...dbUser, // CHANGED: Moved dbUser to beginning so it doesn't override other info
      uid: authUser.uid,
      email: authUser.email,
      emailVerified: authUser.emailVerified,
      providerData: authUser.providerData
    };
    setTimeout(() => next(authUser), 0); // invoke callback outside of Promise
  })
  .catch((err) => setTimeout(() => fallback(), 0)); // invoke callback outside of Promise

সম্পাদিত কোড

উপরের ব্যাখ্যায় আপনাকে আপনার কোড ঠিক করার অনুমতি দেওয়া উচিত তবে Firebaseব্যবহারের বিভিন্ন স্বাচ্ছন্দ্যের পরিবর্তনগুলি সহ আপনার ক্লাসের আমার সংস্করণটি এখানে ।

ব্যবহার:

import FirebaseHelper from './FirebaseHelper.js';

const fb = new FirebaseHelper();
fb.onUserDataListener(userData => {
  // do something - user is logged in!
}, () => {
  // do something - user isn't logged in or an error occurred
}

শ্রেণীর সংজ্ঞা:

// granular Firebase namespace import
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

const config = { /* firebase config goes here */ };

export default class FirebaseHelper { // renamed from `Firebase` to prevent confusion
  constructor() {
    /* init SDK if needed */
    if (firebase.apps.length == 0) { firebase.initializeApp(config); }

    /* helpers */
    this.fieldValue = app.firestore.FieldValue;

    /* Firebase APIs */
    this.auth = firebase.auth();
    this.db = firebase.firestore();
  }

  getUserDocRef(uid) { // renamed from `user`
    return this.db.doc(`users/${uid}`);
  }

  getUsersColRef() { // renamed from `users`
    return this.db.collection('users');
  }

  /**
   * Attaches listeners to user information events.
   * @param {function} next - event callback that receives user data objects
   * @param {function} fallback - event callback that is called on errors or when user not logged in
   *
   * @returns {function} unsubscribe function for this listener
   */
  onUserDataListener(next, fallback) {
    return this.auth.onAuthStateChanged(authUser => {
      if (!authUser) {
        // user not logged in, call fallback handler
        fallback();
        return;
      }

      this.getUserDocRef(authUser.uid).get()
        .then(snapshot => {
          let snapshotData = snapshot.data();

          let userData = {
            ...snapshotData, // snapshotData first so it doesn't override information from authUser object
            uid: authUser.uid,
            email: authUser.email,
            emailVerified: authUser.emailVerifed,
            providerData: authUser.providerData
          };

          setTimeout(() => next(userData), 0); // escapes this Promise's error handler
        })
        .catch(err => {
          // TODO: Handle error?
          console.error('Error while getting user document -> ', err.code ? err.code + ': ' + err.message : (err.message || err));
          setTimeout(fallback, 0); // escapes this Promise's error handler
        });
    });
  }

  // ... other methods ...
}

মনে রাখবেন যে এই সংস্করণে, onUserDataListenerপদ্ধতিটি থেকে সদস্যতা ত্যাগ ফাংশনটি প্রদান করে onAuthStateChanged। যখন আপনার উপাদানটি আনমাউন্ট করা হয়, আপনার কোনও প্রাসঙ্গিক শ্রোতাদের আলাদা করতে হবে যাতে আপনার কোনও স্মৃতি ফাঁস না হয় বা ব্যাকগ্রাউন্ডে ভগ্ন কোডটি চলবে না যখন এটি প্রয়োজন হয় না।

class SomeComponent {
  constructor() {
    this._unsubscribe = fb.onUserDataListener(userData => {
      // do something - user is logged in!
    }, () => {
      // do something - user isn't logged in or an error occurred
    };
  }

  // later
  componentWillUnmount() {
    this._unsubscribe();
  }
}

ধন্যবাদ! আমি আজ রাতে চেষ্টা করব। আমি যে কোনওভাবেই এটি সম্পর্কে জানতে আগ্রহী। আমি শীঘ্রই প্রতিক্রিয়া নিয়ে ফিরে আসব।
মেল

হাই স্যাম - এই পরামর্শ দেওয়ার জন্য আপনাকে ধন্যবাদ। আপনার লিঙ্ক করা ডকুমেন্টেশনগুলি পড়তে আমি কিছুটা সময় নিয়েছি এবং আমার এটি কিছুটা ছিল। আমি সাহায্যের জন্য কৃতজ্ঞ থাকাকালীন - এটি আমার সমস্যার সমাধান করেনি। যখন আমি ব্যবহারকারীর সংগ্রহের বৈশিষ্ট্যগুলি অ্যাক্সেস করার চেষ্টা করি, তখনও আমি একটি ত্রুটি পেয়ে যাচ্ছি যা বলে: টাইপআরার: সংজ্ঞায়িত 'ব্যবহারকারী' এর সম্পত্তিটি পড়তে পারি না
মেল

@ মেল আপনি যখন আসল কোডটি চালাতেন, তখন কি আপনাকে টাইপআরার সম্পর্কে অবহিত করা হয়েছিল? এই প্রথম আপনি এটি উল্লেখ করেছেন। যার অর্থ এই কোডটি ত্রুটিটি প্রতিশ্রুতির সুযোগের বাইরে ফেলে দেওয়ার কাজ করেছে। আপনি কি আউটপুট সরবরাহ করতে পারেন console.log(snapshot.data())?
সমিথোডিংম্যান

আমি এটি চেষ্টা করেছিলাম - ত্রুটি বার্তাটি বলে: TypeError: snapshot.data কোনও ফাংশন নয়
মেল

আমি এটিকে ঘুরিয়ে দেওয়ার চেষ্টা চালিয়ে যাচ্ছি - সম্ভবত আমি এটি একটি ভাল জায়গায় লগ করার চেষ্টা করছি না
মেল

0

আপনার AuthContext.Providerপ্রয়োগে, আপনি onAuthStateChanged সরাসরি এসডিকে শ্রোতাদের অ্যাক্সেস করুন :

componentDidMount() {
  this.listener = this.props.firebase.auth.onAuthStateChanged(
    authUser => {
      authUser
        ? this.setState({ authUser })
        : this.setState({ authUser: null });
    }
  );
}

onAuthUserListenerআপনার সহায়ক শ্রেণীর কাছ থেকে এটি ব্যবহার করতে এটি পরিবর্তন করা উচিত :

componentDidMount() {
  this.listener = this.props.firebase.onAuthUserListener(
    /* next()     */ (authUserWithData) => this.setState({authUser: authUserWithData}),
    /* fallback() */ () => this.setState({authUser: null})
  );
}

প্রচুর এলোমেলো বৈশিষ্ট্যে ভরা লগ বার্তাগুলি সম্পর্কিত, এটি কারণ হ'ল এই সংস্থার firebase.Userএকটি সর্বজনীন এপিআই এবং সংকলনের সময় সংক্ষিপ্ত হওয়া সংখ্যক ব্যক্তিগত সম্পত্তি এবং পদ্ধতিগুলি সহ একটি বাস্তবায়ন উভয়ই রয়েছে । যেহেতু এই সংশোধিত বৈশিষ্ট্য এবং পদ্ধতিগুলি স্পষ্টরূপে গণনাযোগ্য নয় হিসাবে চিহ্নিত করা হয়নি, সেগুলি কোনও লগ আউটপুটে অন্তর্ভুক্ত রয়েছে। আপনি যদি পরিবর্তে কেবল সেই অংশগুলিকেই লগ করতে চেয়েছিলেন যা প্রকৃতপক্ষে কার্যকর হয় তবে আপনি ব্যবহার করে অবজেক্টটিকে বিকশিত এবং পুনর্গঠন করতে পারেন:

// Extracts public properties of firebase.User objects
// see https://firebase.google.com/docs/reference/js/firebase.User#properties
function extractPublicProps(user) {
  let {displayName, email, emailVerified, isAnonymous, metadata, phoneNumber, photoURL, providerData, providerId, refreshToken, tenantId, uid} = user;
  return {displayName, email, emailVerified, isAnonymous, metadata, phoneNumber, photoURL, providerData, providerId, refreshToken, tenantId, uid}
}

function extractUsefulProps(user) {
  let {displayName, email, emailVerified, isAnonymous, phoneNumber, photoURL, uid} = user;
  return {displayName, email, emailVerified, isAnonymous, phoneNumber, photoURL, uid}
}

let authUser = firebase.auth().currentUser;
console.log(authUser);
console.log(extractPublicProps(authUser));
console.log(extractUsefulProps(authUser));

আমাকে সাহায্য করার চেষ্টা চালিয়ে যাওয়ার জন্য @ সামথেকোডিংম্যানকে ধন্যবাদ। আমি এই এক নজর ছিল। আমার উদ্দেশ্যটি হ'ল লেখকের ইউডিটি পড়া যাতে আমি ব্যবহারকারীর সাথে সম্পর্কিত ব্যবহারকারীর সংগ্রহের বৈশিষ্ট্য পেতে এটি ব্যবহার করতে পারি (ব্যবহারকারীর সংগ্রহে নাম ফায়ারবেস লেখার সংগ্রহে ডিসপ্লে নেমের চেয়ে বেশি থাকে - তাই আমি চেষ্টা করছি না প্রমাণীকরণ টেবিলের বৈশিষ্ট্যগুলি পড়ুন
মেল

শ্রোতার উপাদানডিডমাউন্ট ফাংশনে প্রস্তাবিত পরিবর্তনটি কোনও ত্রুটি ফেলেনি - তবে এটি কার্যকর হয়নি। যখন এই শ্রোতাটি ব্যবহার করে ড্যাশবোর্ডের উপাদানটিতে authUser- এর মানটি লগ করার চেষ্টা করা হয় - আমি authUser সংজ্ঞায়িত না হয়ে বলে একটি ত্রুটি পাই। আমি যখন আথকন্টেক্সটেক্সট্রোডিটাম্পটারের জন্য কম্পোনেন্টডিডমাউন্টটি ব্যবহার করি তখন আমি এই ত্রুটিটি পাই না rov লগ বার্তাগুলিতে এলোমেলো বৈশিষ্ট্য সম্পর্কিত তথ্যের জন্য ধন্যবাদ।
মেল

@ মেল আপনি কি নিশ্চিত করতে পারবেন যে আপনার Dashboardফাইলের শেষ লাইনটি export default withAuthentication(Dashboard);(এবং না withFirebase)
সাম্যাথ কোডিংম্যান

নিশ্চিত করেছে। WithFirebase প্রমাণীকরণের সাথে সংযুক্ত করা হয়েছে - সুতরাং এটি এইচওসি-র মাধ্যমে গৃহীত হয়।
মেল

@ মেল আপনি স্ল্যাক
samthecodingman

0

অন্য কেউ যদি একইভাবে আটকে থাকে তবে আমি সমাধানটি এখানে পেয়েছি: ফায়ারবেস এবং প্রতিক্রিয়া: সংগ্রহের উল্লেখ.ডোক () যুক্তির ধরণ

এটি পৃষ্ঠা রিফ্রেশে কাজ করে না (ইউডটি শূন্য রয়েছে এমন ত্রুটিটি এখনও ছুঁড়ে ফেলে) তবে ব্যবহারের প্রতিক্রিয়া হুক্সএফেক্টের মাউন্ট এবং আপডেটের সংমিশ্রণের সাথে উপাদান উপাদানডিডমন্ট ফাংশনটি প্রতিস্থাপন করা উচিত। আমি পরের চেষ্টা করছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.