2017-02-24 112 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