2017-02-27 10 views
0

Firebase認証サービスを使用してログイン/サインインし、Reactネイティブアプリを使用してFirebaseデータベース内のアイテムを追加/削除することができました。しかし問題は、ユーザーはすでにデータベースにあるすべての利用可能なデータではなくログインしています。また、セッションで既にユーザーIDを取得しています。ここに私のコードは次のとおりです。...あなたはfirebaseで、ユーザ固有のルールを設定する必要がReactネイティブとFirebaseのリストビュー

constructor(props) { 
     super(props); 
     this.tasksRef = this.props.firebaseApp.database().ref("/item"); 
     const dataSource = new ListView.DataSource({ 
      rowHasChanged: (row1, row2) => row1 !== row2, 
     }); 
     this.state = { 
      uid: " ", 
      user:null, 
      loading: true, 
      dataSource: dataSource, 
      newTask: 
     }; 
    } 
    componentDidMount() { 
     this.listenForTasks(this.tasksRef); 
    } 

    listenForTasks(tasksRef) { 
     tasksRef.on('value', (dataSnapshot) => { 
      var tasks = []; 
      dataSnapshot.forEach((child) => { 
       tasks.push({ 
        name: child.val().name, 
        type: child.val().type, 
        id: child.val().id, 
        _key: child.key 
       }); 
      }); 
       this.setState({ 
       dataSource: this.state.dataSource.cloneWithRows(tasks) 
      }); 
     }); 
    } 

    componentWillMount() { 
     const userData = this.props.firebaseApp.auth().currentUser; 
      this.setState({ 
      user: userData, 
      uid: userData.uid, 
      loading: false 
     }); 
    } 
    _addTask() { 
     if (this.state.newTask === "") { 
      return; 
     } 
     if (this.state.newTask && this.state.uid) { 
      this.tasksRef.push({ 
       name: this.state.newTask, 
       type: this.state.newType, 
       id: this.state.uid, 
      }); 
     } 

     this.setState({newTask: ""}); 
     this.setState({newType: ""}); 
     this.setState({uid: ""}); 
     alert("Task added successfully"); 
    } 

    _renderItem(task) { 
     const onTaskCompletion =() => { 
      this.tasksRef.child(task._key).remove() 
     }; 
     return (
      <ListItem task={task} onTaskCompletion={onTaskCompletion} /> 
     ); 
    } 

    render() { 
     return (
      <View style={styles.container}> 
       <StatusBar title="to do List"/>      
       <View style={accountStyles.email_container}> 
        <Text style={accountStyles.email_text}>{this.state.user.email}</Text> 
        <TouchableHighlight onPress={this.logout.bind(this)} style={styles.primaryButton}> 
         <Text style={styles.primaryButtonText}>Logout</Text> 
        </TouchableHighlight> 
       </View> 
       <ListView 
        dataSource={this.state.dataSource} 
        enableEmptySections={true} 
        renderRow={this._renderItem.bind(this)} 
        style={styles.listView}/> 
       <TextInput 
        value={this.state.newTask} 
        style={styles.textEdit} 
        onChangeText={(text) => this.setState({newTask: text})} 
        placeholder="New Task" 
       /> 
       <TextInput 
        value={this.state.newType} 
        style={styles.textEdit} 
        onChangeText={(text1) => this.setState({newType: text1})} 
        placeholder="New Type" 
       /> 
       <FloatingActionButton 
        hideShadow={true} 
        buttonColor="rgba(231,76,60,1)" 
        onPress={this._addTask.bind(this)}/> 
      </View> 
     ); 
    } 

    logout() { 
     this.props.firebaseApp.auth().signOut().then(() => { 
      this.props.navigator.push({ 
       component: Login 
      }); 
     }); 
    } 
} 

答えて

0

https://www.firebase.com/docs/security/guide/index.html私は私のリストビューにフィルタを使用する必要があると思うが、私はそれについてはよく分かりません。これにより、クエリは特定のユーザーの関連情報のみを送信します。私はこの同じ質問があった場合は

は、私はこの男が最初の応答FireBase - how to list user-specific data?

で言う「私はグループIDまたはユーザーIDでレコードを格納:」でした

user3521011 @ HERESに私のコードの例:

static setUserName(userId, userName) { 

    let userNamePath = "/user/" + userId + "/details"; 

    return firebase.database().ref(userNamePath).update({ 
     userName: userName 
    }) 

} 
+0

ので、私はより良い – user3521011

+0

はあなたの助けをありがとう理解することができますしてください..あなたがあなたのコードを投稿することができありがとう...だから私は、コンストラクタで、この行を変更: 'this.tasksRef = this.props.firebaseApp .database()。ref( "/ user S/"+ currentUID + "/商品");' とFirebaseの規則:{ ' "ルール": \t { "ユーザー": {\t "$のUSER_ID":{" .read」 : "data.child( 'user_id')。val()== auth.id"、 "。 (newData.child( 'user_id').val()== auth.id) "}}}}' 詳細については、次のリンクを参照してください:https://www.firebase.com/docs/web/guide/retrieving -data.html https://www.firebase.com/docs/security/ – user3521011

関連する問題