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);
}
}
}
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.