2017-02-24 56 views
1

我正在爲我創建的應用程序開發API。這個應用程序將從這個API獲得所有的信息(首先會授權用戶,然後獲取信息)CakePHP使用REST API識別用戶

現在,我試圖讓用戶發送用戶名和密碼到API,它驗證信息和如果它是「好」或「不」,則返回,只能以簡單的方式啓動。我知道所有涉及這個的安全性,只需要讓這個工作。

已經設法在API端發送用戶名和passsword(並且我100%確定數據被正確保存)。不過,當我打電話

$this->Auth->identify($this->request->data);

它始終返回false,我(與參數的不,結果是一樣已經嘗試過)。

我正在使用HttpRequester,firefox插件發送信息。

我已經做了一個$ this-> request-> data的調試,看看信息是否正確,它是。自密碼被哈希後,無法查找數據庫。

數據庫密碼字段是300的長度(255已經嘗試過,也沒有工作)

感謝您的幫助

編輯VARCHAR:

 $this->loadComponent('Auth', [ 
     'authenticate' => [ 
      'Form' => [ 
       'fields' => [ 
        'username' => 'email', 
        'password' => 'password' 
       ] 
      ], 
     ] 
    ]); 

    if($this->request->is('POST')){ 
     //debug($this->request->data); 
     $user = $this->Auth->identify($this->request->data); 
    } 

用戶表:

protected $_accessible = [ 
    '*' => true, 
]; 

/** 
* Hash password 
* 
*/ 
protected function _setPassword($password) 
{ 
    return (new DefaultPasswordHasher)->hash($password); 
} 

protected function _getFullName() 
{ 
    if(isset($this->_properties['full_name'])){ 
     return ucwords(mb_strtolower($this->_properties['full_name'])); 
    } 
} 

ps:還試着做下面的事情(替換變量米後,也沒有運氣)

$this->request->data['username'] = "xxxx"; 
$this->request->data['password'] = "zzzz"; 
+0

在請求數據,你必須使用自定義字段名稱,例如'email'而不是'username'。 'username'鍵只是認證者可以訪問你配置的字段/列名的選項名。 – ndm

+0

是的,這是問題:)謝謝隊友! – Cafn

回答

3

問題是在這裏

'Form' => [ 
       'fields' => [ 
        'username' => 'email', //email is your database field 
        'password' => 'password' // password is your database field name 
       ] 
      ], 

你的代碼應該是

 'Form' => [ 
       'fields' => [ 
        'username' => 'username', 
        'password' => 'password' 
       ] 
      ], 

詳細檢查Configuring Authentication Handlers

+0

你好,@ tarikul05。感謝你的回答!儘管在我的數據庫中,我使用的兩個字段是電子郵件和密碼 – Cafn

+0

,那麼'$ this-> request-> data ['username']'應該是$ this-> request-> data ['email']' – tarikul05

+0

那是@ tarikul05。謝謝您的幫助 :) – Cafn