如何使用Cakephp 3对json请求和jtml请求进行身份验证的基本身份验证?

时间:2016-09-28 19:03:38

标签: json cakephp cakephp-3.0 basic-authentication cakephp-3.x

我需要过滤json请求并允许对这些请求进行基本身份验证,同时只允许对html请求进行表单身份验证。当我在AppController.php的初始化函数中过滤请求时:

if ($this->request->is('json')) {
        $this->loadComponent('Auth', [
            'authorize' => ['Controller'],
            'authenticate' => [
                'Basic' => [
                    'fields' => ['username' => 'email', 'password' => 'password'],
                    'contain' => ['Districts']
                ]
            ],
            'storage' => 'Memory'
        ]);
    } else {
        $this->loadComponent('Auth', [
            'authorize' => ['Controller'],
            'authenticate' => [
                'Form' => [
                    'fields' => ['username' => 'email', 'password' => 'password'],
                    'contain' => ['Districts']
                ]
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ],
            'logoutRedirect' => [
                'controller' => 'Users',
                'action' => 'login'
            ]
        ]);
    }

json请求创建并存储会话,允许用户随后访问网站的其余部分,包括html请求,因为它具有授权会话。我努力寻找造成这种情况的原因并最终发现你必须明确地将基本身份验证方法的存储介质声明为“内存”。我将在下面的答案中发布正确的代码。

这个问题与cakephp 2的问题类似:CakePHP form authentication for normal requests with basic authentication for JSON

1 个答案:

答案 0 :(得分:2)

您必须明确声明基本身份验证使用内存作为存储介质,否则它将创建会话。这是正确的代码:

{{1}}