Bonjour à tous.
J'essaye de mettre en place un service SOAP avec une méthode d'authentification.
Je souhaiterais que le client s'authentifie à l'aide d'une fonction, puis ensuite qu'il puisse utiliser les autres fonctions (s'il y est autorisé).
Mon problème est que SOAP ne semble pas garder de données persistantes entre deux appels de fonctions.
Coté serveur, j'ai ceci :
et du coté client, ça donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php $server = new SoapServer("monwsdl.wsdl"); $server->setClass("MaClass"); $server->setPersistence(SOAP_PERSISTENCE_REQUEST); $server->handle(); ?>
Dans ma classe, j'ai une propriété $isAuth à false par defaut qui passe à true dans la fonction auth(). Problème, elle passe bien à true mais lors de l'appel de la deuxième fonction, elle est repassé à false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $client = new SoapClient("monwsdl.wsdl"); try { if ( $client->auth('login','password') ) { $data = $client->getWhatIWant(); } } catch(SoapFault $e) { $msg = (!$e->getMessage()) ? $e->faultstring : $e->getMessage(); print "Sorry, an error was returned: $msg<HR>"; } ?>
J'ai également essayé avec SOAP_PERSISTENCE_SESSION mais rien n'y fait, à chaque appel de fonction, il reconstruit une instance de l'objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 /** * Authentification * * @param string $username * @param string $password * @return mixed SOAP Fault on error, true on success */ function auth($username,$password) { if ( empty($username) || empty($password) ) throw new SoapFault("-4", "Please provide your username and password !"); $result = mysql_query("SELECT * FROM api WHERE username = '".mysql_real_escape_string($username)."' AND password = '".md5($password)."' LIMIT 1",$this->db); if ($result && $api_user = mysql_fetch_assoc($result)) { $this->isAuth = true; $this->username = $username; $this->password = $password; return true; } else { throw new SoapFault("-5", "Authentification failed"); } }
Quelqu'un a-t-il déjà eu ce problème ?
Ma google search ne me retourne pas grand chose si ce n'est des pages de manuel
Merci pour vos lumières.
Partager