cakephp 3和注销混淆
我不知道事情是否按预期进行 我有一个简单的cakephp3实现,cake-auth0(),我使用的是auth0登录表单 这个流程运行得很好 example.com/users/login->form->my-domain.auth0.com->example.com/users/login?code=secret 注销用户是我遇到问题的地方 example.com/users/logout->auth0域(kill cookie)->example.com 这将成功地使我登录和注销auth0,一切正常。 然而,我一直登录到cake,这让我有点紧张。 带有一些会话用户输出的登录页面显示我已登录,我可以访问example.com/users页面。尚未登录时,我无法查看它 如果有帮助的话,我还没有为用户创建任何数据库 除了使用php对所有会话/Cookie进行野蛮攻击外,还有其他人有什么想法吗cakephp 3和注销混淆,php,cakephp,cakephp-3.0,auth0,Php,Cakephp,Cakephp 3.0,Auth0,我不知道事情是否按预期进行 我有一个简单的cakephp3实现,cake-auth0(),我使用的是auth0登录表单 这个流程运行得很好 example.com/users/login->form->my-domain.auth0.com->example.com/users/login?code=secret 注销用户是我遇到问题的地方 example.com/users/logout->auth0域(kill cookie)->example.com 这将成功地使我登录和注销auth0,一
更新:通过代码挖掘了很多东西。Cake的香草Authcomponent::注销没有什么作用。通过手动终止某种会话,我获得了一些对我有用的东西 我会把这件事留着,因为我知道某个古鲁会在某个时候出现 我能够像这样实现注销(蛋糕):
public function logout() {
$url = $this->Auth->logout();
$this->request->session()->destroy();
return $this->redirect($url);
}
调用AuthComponent的注销函数并保存响应url字符串
销毁请求会话,因为注销没有这样做
重定向。如果您想从那些不一定是auth0专家的人那里寻求帮助,可能需要添加一些关于实际登录和注销流程的技术细节,特别是关于后者。从您显示的代码中,我看不出这除了在调用controllers
logout
方法时清除CakePHP会话存储之外还有什么作用。@ndm我认为这个问题与auth0无关,除非我使用的cake-auth0插件有不完整的地方。auth0周围的一切都在工作,但当我尝试在注销后访问登录用户的信息时,我仍然可以获取该信息。就好像cake的auth注销不起作用一样。我运行了一个调试器并吐出了信息,它确实到达了应该终止会话的代码,但没有终止会话。如果不知道确切的流程,很难判断可能发生了什么,人们只能猜测。同样,通过查看代码,我看不到调用logout()
将如何影响CakePHP身份验证会话数据以外的任何内容,似乎没有任何内容会以任何方式影响可能的身份验证会话数据(存储在PHP会话中),更不用说身份验证会话了。你说是的,但我没有任何信息可以证明这一点,这并不能让事情变得更简单。在只有CakePHP身份验证会话数据受到影响的情况下,身份验证组件可能会再次获取从auth0会话数据检索到的用户信息。这可能与您的声明相矛盾,您正在从auth0登录auth,但正如我所说的,我无法确定是否确实如此,因此我在黑暗中拍摄。添加一些会话调试信息可能也会有所帮助,例如重定向之前、重定向之后以及auth组件启动前后的确切会话内容。Auth0只是使用标准oauth内容进行登录。AuthComponent::logout()返回一个url。使用我的auth0设置,这是他们给我的注销url,它终止特定用户对该应用程序的身份验证状态。使用cake授权用户的过程是通过我的登录方法显式完成的。我注意到我正在使用的cake-auth0插件没有AuthComponent,因此我认为可能存在某种尚未解决的不兼容性。谢谢你抽出时间。我自己也很准时,所以我自己就结束了这次会议。希望没有问题。
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
}
public function logout() {
$url = $this->Auth->logout();
$this->request->session()->destroy();
return $this->redirect($url);
}