У меня возникли проблемы с тем, чтобы обернуть голову вокруг того, все ли работает так, как задумано.
У меня есть простая реализация cakephp3, cake-auth0 (https://github.com/jsoftb/auth0) и я использую форму авторизации auth0.
Этот поток работает просто отлично.
example.com/users/login -> form -> my-domain.auth0.com -> example.com/users/login?code=secret
$auth_code = $this->request->query('code', null);
if(!is_null($auth_code)) {
$user = $this->Auth->identify();
if($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl()); // example.com/
}
}
Выход пользователя из системы — вот где у меня проблемы.
example.com/users/logout -> auth0-domain (kill cookie) -> example.com
public function logout() {
return $this->redirect($this->Auth->logout());
// $this->redirect('http://auth0.domain?returnTo=http://example.com/');
}
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow('logout'); // Appears to do nothing
}
Это успешно регистрирует меня и выходит из auth0 просто отлично.
Я остаюсь зарегистрированным в пироге однако, и это сводит меня с ума.
Моя страница входа в систему с некоторыми выходными данными пользователя сеанса показывает, что я вошел в систему, и я могу получить доступ к странице example.com/users. Я не могу просмотреть его, пока не вошел в систему.
Я еще не создал никакой базы данных для пользователей, если это поможет.
Если не считать жестокости и уничтожения всех сессий / файлов cookie, используя только php, у кого-нибудь еще есть идеи?
Обновить: Много копал через код. Ванильный Cake Authcomponent :: logout ничего не делает. Мне удалось получить что-то, что будет работать для меня, убивая вручную сеанс какой-то.
Я оставлю это, потому что я знаю, что какой-то гуру придет в какой-то момент.
Я смог добиться выхода из (торта), как это:
public function logout() {
$url = $this->Auth->logout();
$this->request->session()->destroy();
return $this->redirect($url);
}
Вызовите функцию выхода из системы AuthComponent и сохраните строку URL-адреса ответа.
Уничтожьте сеанс запроса, потому что выход из системы не сделал этого.
Перенаправление.
Задача ещё не решена.
Других решений пока нет …