Bonjour à tous, je rencontre un petit problème avec la fonction login. J'ai beau essayé de changer les paramètre au niveau du controller, il me retourne toujours false.
Le model : User.php
<?php
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
public $name = 'User';
public $belongsTo = array(
'Role'
);
public $validate = array(
'email' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'Email required'
),
array('rule' => 'isUnique', 'message' => 'This email exist in database')
),
'password' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'Password required'
)
),
'role' => array(
'valid' => array(
'rule' => array('notEmpty'),
'message' => 'Role unvalid',
'allowEmpty' => false
)
)
);
public function beforeSave($options = array()) {
if (!empty($this->data'User']'password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));
$this->data'User']'password'] = $passwordHasher->hash(
$this->data'User']'password']
);
}
return true;
}
}
?>
L'app controller :
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $helpers = array('Text', 'Form', 'Html', 'Session');
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'admin_index'),
'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
'loginAction' => array('controller' => 'users', 'action' => 'login'),
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
),
'fields'=> array('username'=>'username', 'password' => 'password')
)
)
)
);
public function beforeFilter() {
$this->Auth->allow('login', 'admin_ajouter', 'admin_index', 'admin_modifier', 'admin_voir', 'admin_supprimer');
}
}
Et les fonctions de connection l'UsersController
public function admin_login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->Session->setFlash(__('Logged'));
} else {
$this->Session->setFlash(__('No'.$this->Auth->user()));
}
}
else{
$this->Session->setFlash(__('Form normal'));
}
$view = "/pages/admin/User/login";
$this->render($view);
}
public function admin_logout() {
$this->Session->setFlash(__("You're disconnected"));
$this->Auth->logout();
return $this->redirect($this->referer());
}
Au début je m'étais dit que balancer les données de formulaire dans la fonction fonctionnait, mais en faite ça log l'user avec les données qu'on envoie, ça fait pas de vérification si elle existe en base de données.
Si quelqu'un voit une cacahuète dans le code, je suis preneur, parce qu'avec la tête dans le guidon, j'ai du mal à voir le vélo maintenant.
Merci par avance de votre aide.
Nohman