2016-08-13 11 views
0

私のcakephpプロジェクト用のcustompasswordhasherを作成します。 cakephpのバージョンは2.5です。私は、CakePHPの料理本に従うと cakephp create custompasswordhasher内部サーバーエラー

App::uses('AbstractPasswordHasher', 'Controller/Component/Auth'); 

class CustomPasswordHasher extends AbstractPasswordHasher { 
    public function hash($password) { 
     $hasher = md5(Configure::read('Security.salt') . $password . Configure::read('Security.cipherSeed')); 
     return $hasher; 
    } 

    public function check($password, $hashedPassword) { 
     //debug('PHPassHasher'); die('Using custom hasher'); //<--THIS NEVER HAPPENS! 
     $password = md5(Configure::read('Security.salt') . $password . Configure::read('Security.cipherSeed')); 
     echo $password."==".$hashedPassword;exit; 
     return password_verify($password, $hashedPassword); 
    } 
} 

、ここDirectoryコントローラ/認証/ CustomPasswordHasher.php

で を次のカスタムクラスを作成している私のログイン機能はコントローラに

public function admin_login() { 
    if ($this->Auth->loggedIn()) { 
     return $this->redirect($this->Auth->redirect()); 
    } 
    if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
      return $this->redirect($this->Auth->redirect()); 
     } else { 
      $this->Session->setFlash('Username or password is incorrect', 'error'); 
     } 
    } 
} 

とappController.phpであります私は機能を設定する

public function beforeFilter() { 

     if ($this->request->prefix == 'admin') { 
      $this->layout = 'admin'; 
      AuthComponent::$sessionKey = 'Auth.User'; 
      $this->Auth->loginAction = array('controller' => 'administrators', 'action' => 'login'); 
      $this->Auth->loginRedirect = array('controller' => 'administrators', 'action' => 'dashboard'); 
      $this->Auth->logoutRedirect = array('controller' => 'administrators', 'action' => 'login'); 
      $this->Auth->authenticate = array(
       'all' => array(
        'scope' => array(
         'User.is_active' => 1 
        ) 
       ), 
       'Form' => array(
        'userModel' => 'User', 
        'passwordHasher' => array(
         'className' => 'Auth/CustomPasswordHasher' 
        ) 
       ) 
      ); 
      $this->Auth->allow('login'); 
     } else { 
      /* do another stuff for user authentication */ 
     } 
    } 

ここに私のログインフォームがあります。

<div class="login-box"> 
    <div class="login-logo">Admin Login</div> 
    <div class="login-box-body"> 
     <p class="login-box-msg">Sign in to start your session</p> 
     <?php echo $this->Session->flash(); ?> 
     <?php echo $this->Form->create(); ?> 
      <div class="form-group has-feedback"> 
       <?php 
        echo $this->Form->input('User.username', 
         array(
          'label'   => false, 
          'class'   => 'form-control', 
          'placeholder' => 'Username', 
          'autocomplete' => 'off', 
          'autofocus'  => true, 
          'value'   => @$username 
         ) 
        ); 
       ?> 
       <span class="glyphicon glyphicon-envelope form-control-feedback"></span> 
      </div> 
      <div class="form-group has-feedback"> 
       <?php 
        echo $this->Form->input('User.password', 
         array(
          'type'   => 'password', 
          'label'   => false, 
          'class'   => 'form-control', 
          'placeholder' => 'Password', 
          'value'   => @$password 
         ) 
        ); 
       ?> 
       <span class="glyphicon glyphicon-lock form-control-feedback"></span> 
      </div> 
      <div class="row"> 
       <div class="col-xs-8">  
        <div class="checkbox icheck "> 
         <label> 
         <input type="checkbox" name="data[Admin][remember_me]"> Remember Me </label> 
        </div>       
       </div> 
       <div class="col-xs-4"> 
        <button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button> 
       </div> 
      </div> 
     <?php echo $this->Form->end(); ?> 
     <a href="#forgotpassword" data-toggle="modal" data-target="#forgot_password_modal1">I forgot my password</a><br> 
    </div> 
</div> 

どのように送信フォームを作成するか。私は、スタックトレース

enter image description here

だから誰もがあなたが私はこれで助けることができるのですか?

+0

さて、passwordHasherの138行目の実際のエラーメッセージは何ですか? – Challe

+0

よく私は今原因を見た。私のコントローラでclassNameが間違って呼び出されたからです。 「CustompasswordHasher」ではなく「Custom」でなければなりません。ケーキは自動的にそれを追加します。 –

答えて

0

私はコントローラでclassNameを間違って呼び出しています。 「CustompasswordHasher」ではなく「Custom」でなければなりません。ケーキは自動的にそれを追加します。