Bonjour,
Je suis entrain de développer une application mobile en react native mais j'utilise cakephp 2 pour le backend.
je voudrais mettre en place un système de avec numero de télphone et mot de passe, J'ai un soucis quand j'envoie la requete ça ne marche pas.
Je me demande si c'est dû à la synthaxe des formulaire en cakephp? ou j'ai mal fait.
Besoin d'explication s'il vous plait.
Merci

voici mes code

component react native

import React from 'react';
import {StyleSheet, View, TextInput,Text, TouchableOpacity,Keyboard} from 'react-native';
import { getDoctors } from '../API/getDoctors';
class Formulaire extends React.Component {

  constructor(props){
    super(props);
      this.state={
        username:'',
        password:'',
    }
  }

  render() {
    return (

      <View style={styles.main_container}>

        <TextInput style={styles.inputPhone} 
        placeholder="N° de téléphone" 
        keyboardType="numeric"
        underlineColorAndroid='rgba(0,0,0,0)' 
        onChangeText={(username)=>this.setState({username})}/>

        <TextInput style={styles.inputPassword} 
        placeholder="Mot de passe" 
        keyboardType="default" 
        underlineColorAndroid='rgba(0,0,0,0)' 
        secureTextEntry={true}
        onChangeText={(password)=>this.setState({password})}/>

        <TouchableOpacity 
          style={styles.TouchConnect}
           onPress={this.Login}>
          <Text style={styles.input_text}>Se connecter</Text>
        </TouchableOpacity>

      </View>
    )

    }

    Login= () => {

      Keyboard.dismiss();
      fetch('https://www.test.com/mobile/users/loginApi/',{
        method:'POST',
        headers: {
        Accept: 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          username: this.state.username,
          password: this.state.password,
        })
      })
      .then((response) => response.json())
        .then((responseJson) => {
          alert(JSON.stringify(responseJson));
          if(responseJson.status==='success'){
            this.props.navigation.navigate('welcome');
          }else{
            alert(JSON.stringify(responseJson));
          }
        })
        .catch((error)=>{
          console.error(error);
        })
    }
 }  

le code cakephp

public function loginApi(){

    $this->autoRender=false;
    $username= $this->data['username'];
    $this->request->data['User']['phone'] = $username;
    $this->Auth->authenticate['Form'] = array('fields' => array('username' => 'phone'));
     if(!$this->Auth->login()){ 
         $arrReturn=array();
         $arrReturn['status']='false';
         echo json_encode($arrReturn);
      }else {
           $userId=$this->Auth->User('id');
           if($this->Auth->User('role')=='patient'){
                $this->User->id=$userId;
                $this->User->saveField('lastlogin',date('y-m-d H:i:s'));
                $this->User->saveField('online','1');
                $user=$this->User->find('first',array('conditions'=>array('User.id'=>$userId),'fields'=>array('id','role','phone','username','filename','sexe','online','lastlogin')));
                     $arrReturn=array();
                     $arrReturn['status']='success';
                     $arrReturn['role']=$user['User']['role'];
                     $arrReturn['User']=$user['User'];
           echo json_encode($arrReturn);
           }else{
             $this->User->id=$userId;
             $this->User->saveField('lastlogin',date('y-m-d H:i:s'));
             $this->User->saveField('online','1');
            $user=$this->User->find('first',array('conditions'=>array('id'=>$userId),'fields'=>array('id','role','description','specialite','tag',
                  'online','phone','username','filename','online','lastlogin')));

                     $arrReturn=array();
                     $arrReturn['status']='success';
                     $arrReturn['User']=$user['User'];
                     echo json_encode($arrReturn);

           }
      }
}

1 réponse


Bonsoir.
Est-ce que tu as tout simplement regardé dans la documentation ?
Car le cas dont tu parles, tout du moins en partie, y est bien expliqué :
Accéder aux données XML ou JSON.

Les applications employant REST échangent souvent des données dans des organes post non encodées en URL. Vous pouvez lire les données entrantes dans n’importe quel format en utilisant CakeRequest::input(). En fournissant une fonction de décodage, vous pouvez recevoir le contenu dans un format déserializé:

// Obtenir les données encodées JSON soumises par une action PUT/POST
$data = $this->request->input('json_decode');

Il me semble justement que ça correspond à ton cas.