0

json 요청을 필터링하고 이러한 요청에 기본 인증을 허용하고 html 요청에 대해 폼 인증 만 허용해야합니다. 내가 AppController.php 내 초기화 함수에서 요청을 필터링 :CakePhp 3으로 html 요청에 대한 json 요청 및 양식 인증을위한 기본 인증을 사용하는 방법은 무엇입니까?

if ($this->request->is('json')) { 
     $this->loadComponent('Auth', [ 
      'authorize' => ['Controller'], 
      'authenticate' => [ 
       'Basic' => [ 
        'fields' => ['username' => 'email', 'password' => 'password'], 
        'contain' => ['Districts'] 
       ] 
      ] 
     ]); 
    } 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 form authentication for normal requests with basic authentication for JSON

답변

1

:

이 질문은 CakePHP의 2 이것과 유사하다. 올바른 코드는 다음과 같습니다.

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' 
      ] 
     ]); 
    }