Bonjour,
J'ai installé un forum et trouvé que je pourrais utiliser la meme table user pour mon application en CakePHP et mon forum.
Le problème est que le mot de passe une fois encrypté ne donne pas le meme résultat sur l'un et sur l'autre.
Quelles solutions pour faire matcher les deux ?
Ma fonction register coté cakephp
function register() {
if ($this->request->data) {
if(0 == $this->User->find('count')) $this->request->data'User']'admin'] = 1;
else $this->request->data'User']'admin'] = 0;
if($this->User->save($this->request->data)) {
$this->User->recursive = -1;
$user = $this->User->find('first', array('conditions'=>array(
'id'=>$this->User->getLastInsertID())));
}
}
$this->set('useRecaptcha', $useRecaptcha);
$this->set('title_for_layout', __('Registration form'));
}
cote forum
function encode_password($password){
return md5($password);
}
La méthode utilisé par cakephp pour encodé est un peu flou. a aucun moment il n'est question de password, dans le code cakephp et pourtant ca marche.
A tout hasard, as tu tenté lors de l'enregistrement du user d'encoder le password en md5 ?
Verifié si md5('unmotdepasseduforum') crash la meme chose que le coté password du forum.
Exemple:
debug(md5('unmotdepasseduforum')); // dans une vue
et comparer les 2 passwords (coté CK et Forum) voir si il crash la meme chose.
Si oui il faut adapter ton add user et faire ca manuellement dans le save.
Exemple:
public function add(){
$this->data->save(array(
'username' => $this->request->data'username'],
'password' => md5($this->request->data'password']),
// etc....
}
Bonjour,
Pour la gestion des membres dans cakephp, il utilise un systeme de salt + mot de passe via la function $this->Auth->password():
Il ne fait pas qu'un simple md5. Pour ça que le match ne fonctionne pas ;)
La technique de mikachu est la bonne mais pour moi un md5 sans salt c'est un peu trop facile à recuperer ...
Cordialement
Si j'ai bien compris, il faut alors soit dégrader la sécurité ou savoir
comment utiliser le même type d'encryption depuis une application non CakePHP ?
Ah la la, quel galere, il faut que je renvoi un email a tous les gens inscrit pour qu'ils regenere leurs mot de passe ?
Méthode simple oui.
Sinon tu peux te compliquer la vie en faisant un message d'alerte sécurité lors de l'authentification du user.
du style:
Veuillez mettre a jour votre mot de passe pour des raisons de sécurité en cliquant su r le lien suivant:
OU:
Afin de bénéficier du forum, veuilez mettre a jour votre mot de passe en cliquant sur le lien suivant:
link(controller=> users, action=>updatepassword, //$this->Session->read('User.id') si tu envoi le id a la méthode)
Si ils le font, tu fais un update du champ password avec le cryptage md5 par exemple (une sorte de resetpassword)
En creant une simple méthode du style:
//Méthode dans UsersController
public function updatepassword($id = null){
// en recupérant le id user
$this->User->id = $id;
// OU par la session:
$this->User->id = $this->Auth->user('id');
$this->User->saveField('password', md5($this->request->data'password']));
// message Fash mise a joru réussi.
// redirection vers la home par exemple.
}
Je penses que cela pourrait fonctionner enfin a toi d'adapter, car sans ddoute des erreurs (écrit a l arrache sans relecture)