Cakephp使用REST API识别用户

时间:2017-02-24 16:33:26

标签: php api authentication cakephp cakephp-3.x

我正在为我正在创建的应用程序开发API。此应用程序将从此API获取所有信息(首先将授权用户,然后获取信息)

现在,我试图让用户向API发送用户名和密码,它会验证信息并返回,如果它"确定"或者"不是",非常简单的开始。我知道所涉及的所有安全性,只需要让它工作。

已经设法在API端发送用户名和密码(并且我100%确定数据已正确保存)。但是,当我打电话时

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

它总是向我返回false(已经尝试过参数而没有,结果是一样的。)

我使用HttpRequester,firefox插件发送信息。

我已经对$ this-> request->数据进行了调试,以查看信息是否正确,确实如此。因为密码正在被散列,所以无法对数据库进行查找。

数据库密码字段是一个长度为300的varchar(已尝试使用255,也没有工作)

感谢您的帮助

编辑:

      $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";

1 个答案:

答案 0 :(得分: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