【问题标题】:Cakephp Identify user using REST APICakephp 使用 REST API 识别用户
【发布时间】:2017-02-24 16:33:25
【问题描述】:

我正在为我正在创建的应用程序开发 API。此应用程序将从该 API 获取所有信息(首先对用户进行身份验证,然后获取信息)

现在,我正在尝试让用户向 API 发送用户名和密码,它会验证信息并返回“ok”或“not”,非常简单,仅启动。我知道其中涉及的所有安全性,只需要让它工作。

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

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

它总是返回 false 给我(已经尝试过带参数和不带,结果是一样的)。

我正在使用 HttpRequester、firefox 插件来发送信息。

我已经对 $this->request->data 进行了调试,以查看信息是否正确,并且正确。由于密码正在被散列,因此无法在数据库上进行查找。

数据库密码字段是一个长度为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";

【问题讨论】:

  • 在请求数据中,您也必须使用自定义字段名称,即email 而不是usernameusername 键只是身份验证器可以访问您配置的字段/列名称的选项名称。
  • 是的,这就是问题所在 :) 谢谢老兄!

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


【解决方案1】:

问题来了

    '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

【讨论】:

  • 你好@tarikul05。感谢你的回答!虽然,在我的数据库中,我使用的两个字段是电子邮件和密码
  • 那么$this->request->data['username'] 应该是$this->request->data['email']
  • 就是@tarikul05。感谢您的帮助:)
猜你喜欢
  • 2012-07-03
  • 2018-01-23
  • 2021-06-28
  • 2017-08-03
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多