0

我在我的项目中使用基本身份验证来访问Api。在ApiController,我添加了下面的代码在beforeFilter:Cakephp 3 HTTP基本身份验证登录问题

$this->Auth->config('authenticate', [ 
     'Basic' => [ 
      'fields' => ['username' => 'username', 'password' => 'api_key'], 
      'userModel' => 'Users' 
     ] 
    ]); 

所以从铬邮递员应用,我送与基本身份验证凭据POST请求。例如如下所示: enter image description here

因此,当我发送请求时,我会收到未经授权的错误。

+0

你有没有做到这一点是建议在有关登录问题的其他问题,可以在这里找到在SO基本检查这一个?检查列类型/长度,确保密码真正存储在散列中,调试正在发出的查询(他们是否找到任何东西?如果实际上发现了什么东西,它到底是什么东西,它是否与数据库?),确保散列通常在创建新用户时正确存储等... – ndm

+0

@ndm,我已经完成初始故障排除以检查密码如何存储在数据库中。我可以在用户表中的api_key字段中创建新的API密钥。遵循这个[链接](http://book.cakephp.org/3.0/en/controllers/components/authentication.html#creating-api-keys-for-basic-authentication)。 – Ray

+1

如果没有进一步的逻辑,文档显示没什么意义,因为您不能简单地交换默认使用不同哈希算法的令牌(默认情况下使用不同的哈希算法)交换默认使用配置的密码哈希器(BCRYPT)测试的密码SHA1)。这些文档需要修正,你可能想在GitHub上创建一个问题**(https://github.com/cakephp/docs/issues)。 – ndm

回答

0

你发送一个“密码”字段

您的应用程序期待一个“API_KEY”字段,将包含密码POST请求。

+0

感谢您的快速响应。但在我的控制器中,我使用密码作为字段,并将密码字段中的api_key值插入。 ''fields'=> ['username'=>'username','password'=>'api_key']'。不应该从cakephp的BasicAuthenticate负责休息以检查数据库中的api_key字段? – Ray

0

我想你错过了你的模型实体中的这一个脚本。

use Cake\Auth\DefaultPasswordHasher; 


     protected function _setPassword($password) 
     { 
      if (strlen($password) > 0) { 
       return (new DefaultPasswordHasher)->hash($password); 
      } 
     } 

放入型号/实体/ user.php的