2014-10-17 159 views
0

我使用CakePHP版本2.5.4無效的用戶名和密碼,登錄

問題我無法登錄,$這個 - > Auth->登錄()返回false每次!

有或沒​​有散列密碼的相同結果,有什麼可能是錯誤的? 花了一整天檢查代碼,但是沒辦法..

我,如果你有時間來檢查這裏的代碼欣賞它:https://gist.github.com/anonymous/2e0c6ab6b3b9a8604893

一切包括:user.php的,UsersController.php,登錄.ctp,register.ctp

在此先感謝...

回答

2

我不知道,但我覺得$this->data是不是在CakePHP的2.x版本可用您應該將$this->data更改爲$this->request->data,並且所有字段均可用於身份驗證。

你在AppController中使用了什麼類和hashType?你需要在AppController和Model中使用相同的hashType。

例, 應用程序控制器:

public $components = array(
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'passwordHasher' => array(
        'className' => 'Simple', 
        'hashType' => 'sha256' 
       ) 
      ) 
     ) 
    ) 
); 

型號:

public function beforeSave($options = array()) { 
    if (!empty($this->data[$this->alias]['password'])) { 
     $passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256')); 
     $this->data[$this->alias]['password'] = $passwordHasher->hash(
      $this->data[$this->alias]['password'] 
     ); 
    } 
    return true; 
} 
+0

他是對的!在模型中使用$ this->數據,在控制器中使用$ this-> request-> data! 功能登錄(){ \t如果($這個 - >請求 - >是( '後')){ \t \t如果($這個 - > Auth->登錄()){ \t \t \t返回$此 - >重定向($這 - > Auth->重定向()); \t} \t \t $ this-> Session-> setFlash('Invalid Username or Password please try again'); \t} } – 2014-10-17 20:25:23

+0

Controller :: $ data'仍然可用([** via magic properties **](https://github.com/cakephp/cakephp/blob/2.5.4/lib/Cake/Controller) /Controller.php#L395))以達到向後兼容的目的。 – ndm 2014-10-17 21:09:54

1

在AppController的確定包括這樣的功能:

public function beforeFilter() { 
    Security::setHash('sha1'); 

} 

你是說你的註冊是sha1

現在在你的數據庫中你的字段'password'應該是VARCHAR(30)不能超過30個字符。

而且我不舒爾這個線register.ctp,並有一個逗號更後真這是一個錯誤

<?php echo $this->Form->create('User',array('type' => 'file','novalidate' => true,));?> 

爲什麼是一個文件?我的事情,只是應該是這個

<?php echo $this->Form->create('User');?> 

和NOVALIDATE可以與真正的數據庫進行初始化,則只能升級到新的價值

確定。 我告訴過你現在必須在AppController中添加什麼,現在將其添加到UserController中。這就是當你查看錶單以多次存儲用戶信息以使用sha1加密密鑰時所發生的情況,這是我們在註冊時存儲在數據庫中的加密。但是,登錄時可能會發送另一種類型的加密,並且驗證數據進行驗證比較a(sha1(密碼註冊)==其他加密(登錄密碼))時,通常情況並不相同,這是因爲特定的beforeFilter在加密密鑰中。

加入這一點,並改變用戶控制器:

public function beforeFilter() { 
     parent::beforeFilter(); 
    } 
    public function login() { 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       if($this->Auth->user('activated')==1){ 
        $this->Session->setFlash(__('Bienvenido, '. $this->Auth->user('username'))); 
        return $this->redirect($this->Auth->redirectUrl()); 
       }else{ 
        $this->Session->setFlash(__('Your Email is not verified. Please verify and try again.')); 
        $this->redirect($this->Auth->logout()); 
       } 
      } else { 
       $this->Session->setFlash(__('Invalid Username or Password please try again')); 
      } 
     } 
    } 
+0

但sha1與密碼無關,它將我在激活鏈接中發送的令牌散列化。 窗體的類型是文件,因爲我有一個頭像上傳字段,但不再是和忘記將其刪除,無論如何仍然獲得無效的用戶名和密碼,即使有這些變化 – Exchanger13 2014-10-17 19:58:55

+0

編輯我的答案,我認爲它有一些事情要做密碼的散列。 – CoolLife 2014-10-17 20:04:15

+0

嘗試移動此條件(if($ results ['User'] ['activated'] == 1))to Auth配置範圍:http://book.cakephp.org/2.0/en/core-libraries/components /authentication.html#configuring-authentication-handlers 調試您的密碼以查看散列表中的密碼==散列數據庫中的密碼http://book.cakephp.org/2.0/en/core-libraries/components /authentication.html#hashing-passwords 使用相同的hashType! – 2014-10-17 20:10:55

0

它實際上發生,因爲你可能不使用密碼hash.You可以在你的用戶模型添加婁代碼。

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

就在您的model.Then添加此代碼做出的用戶again.If您已經在模型中添加此代碼,然後把它保存散列密碼database.Is?如果是的話,那麼這個錯誤可能會發生另一個原因,即如果你改變你的安全salt之後讓用戶。你可以通過建立一個新的用戶來解決這個問題。現在的問題你將如何讓用戶?

在你的AppController中添加

$this->Auth->allow();

在beforeFilter()method.Then在瀏覽器着呢,你可以訪問,使一個新user.After讓用戶再次嘗試login.I認爲它會工作。

相關問題