У меня есть стандартная аутентификация формы, объявленная в AppController.php:
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'authenticate' => [
'Form' => [
'scope' => ['Users.active' => 1]
]
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'account'
],
'logoutRedirect' => [
'controller' => 'Index',
'action' => 'index'
]
]);
Теперь мне нужна аутентификация на основе api_key в веб-сервисе. В документе объясняется, как это сделать. как это:
$this->loadComponent('Auth', [
'authenticate' => [
'Basic' => [
'fields' => ['username' => 'username', 'password' => 'api_key'],
'userModel' => 'Users'
],
],
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);
Итак, теперь мне интересно, как загрузить второй механизм аутентификации в моем веб-сервисе. Я пытался сделать это:
class DeviceconnectionsController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Auth', [
'authenticate' => [
'Basic' => [
'fields' => ['username' => 'username', 'password' => 'api_key'],
'userModel' => 'Users'
],
],
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);
}
....
}
Но Cake жалуется, что я пытаюсь перезагрузить другой компонент аутентификации. Так что, возможно, правильный способ — загрузить оба механизма аутентификации в AppController.php, как показано ниже:
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'authenticate' => [
'Form' => [
'scope' => ['Users.active' => 1]
],
'Basic' => [
'fields' => ['username' => 'username', 'password' => 'api_key'],
'userModel' => 'Users'
],
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'account'
],
'logoutRedirect' => [
'controller' => 'Index',
'action' => 'index'
]
]);
Но это кажется неверным, поскольку обе аутентификации используют разные настройки storage
и unauthorizedRedirect
.
Как сделать?
storage
наsession
, а для базовой аутентификации по ключу APIstorage
следует установить наmemory
. И я не вижу, как изменить этот параметр. - person fralbo   schedule 01.03.2016Basic
аутентификация не обязательно требует использования хранилищаMemory
, вы, конечно, также можете использовать хранилищеSession
, которое, однако, сделает его сохраняющим состояние. Если вам действительно нужна аутентификация с сохранением состояния и без сохранения состояния, укажите это в своем вопросе и объясните свой сценарий немного подробнее, т.е. зачем вам обе? ресурсы (контроллеры/действия)? и т.д... - person ndm   schedule 01.03.2016'unauthorizedRedirect' => false
. И я не знаю, как его установить. - person fralbo   schedule 01.03.2016AppController
, чтобы не нужно было загружать туда аутентификацию. - person ndm   schedule 01.03.2016