2016-01-21 1 views
0

J'utilise cakephp 2.7.8 pour construire un panneau d'administration. Mon projet contient plusieurs admin à la place des utilisateurs, c'est pourquoi j'ai la table admins dans la base de données et non les utilisateurs. en utilisant BlowfishHasher pour le hachage du mot de passe, mais lors de la création d'un nouvel enregistrement (en ajoutant un nouvel utilisateur), le mot de passe n'est pas un hachage et une simple chaîne est stockée dans la table de mots de passe.cakePHP: mot de passe n'est pas le hachage tout en ajoutant l'utilisateur

requête pour la table:

CREATE TABLE `admins` (
    `id` char(36) NOT NULL, 
    `username` varchar(50) DEFAULT NULL, 
    `password` varchar(255) DEFAULT NULL, 
    `gender` varchar(45) DEFAULT NULL, 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`)) 

modèle Admins: admin.php

<?php 
App::uses('AppModel', 'Model'); 
App::uses('BlowfishPasswordHasher','Controller/Component/Auth'); 
/** 
* Admin Model 
* 
*/ 
class Admin extends AppModel { 

/** 
* Display field 
* 
* @var string 
*/ 

    public $displayField = 'first_name'; 


     public function beforeSave($options = array()) { 
      if(isset($this->data[$this->alias['password']])){ 
       $passwordHasher = new BlowfishPasswordHasher(); 
       $this->data[$this->alias]['password'] = $passwordHasher->hash(
        $this->data[$this->alias]['password'] 
         ); 
      } 
      return true; 
     } 
} 

Admins Controller: AdminsController.php

<?php 
App::uses('AppController', 'Controller'); 
/** 
* Admins Controller 
* 
* @property Admin $Admin 
* @property PaginatorComponent $Paginator 
* @property FlashComponent $Flash 
* @property SessionComponent $Session 
*/ 
class AdminsController extends AppController { 

/** 
* Components 
* 
* @var array 
*/ 
    public $components = array('Paginator', 'Flash', 'Session'); 

/** 
* index method 
* 
* @return void 
*/ 
    public function index() { 
     $this->Admin->recursive = 0; 
     $this->set('admins', $this->Paginator->paginate()); 
    } 
/** 
* login function 
*/ 
     public function login(){ 
      if($this->request->is('post')) { 
       if($this->Auth->login()) { 
        return $this->redirect($this->Auth->redirectUrl()); 
       } 
       $this->Flash->error(__('Invalid username or password, try again')); 
      } 
     } 

/** 
* logout function 
*/ 
     public function logout(){ 
      return $this->redirect($this->Auth->logout()); 
     } 
} 

App Controller: AppController.php

<?php 
App::uses('Controller', 'Controller'); 

/** 
* @package  app.Controller 
* @link  http://book.cakephp.org/2.0/en/controllers.html#the-app-controller 
*/ 
class AppController extends Controller { 

    public $components = array(
     'Flash', 
     'Auth' => array(
      'loginRedirect'=>array(
       'controller'=>'admins', 
       'action'=>'index' 
      ), 
      'logoutRedirect'=>array(
       'controller'=>'admins', 
       'action'=>'login' 
      ), 
      'authenticate'=>array(
       'Form'=>array(
        'passwordHasher'=>'Blowfish' 
       ) 
      ) 
     ) 
    ); 

    function beforeFilter() { 
     $this->Auth->authenticate = array(
      AuthComponent::ALL => array(
       'userModel' => 'Admin' 
      ) 
     ); 
     $this->Auth->allow('login','add','index'); 
    } 
} 

Répondre

0

Vous avez une erreur sur cette ligne: -

if(isset($this->data[$this->alias['password']])){ 

Il devrait être: -

if(isset($this->data[$this->alias]['password'])){ 
+0

grâce il a travaillé, j'étais chercher l'erreur d'hier. de toute façon mais maintenant la connexion ne fonctionne pas. Il est dit nom d'utilisateur mot de passe incorrect –