CakePHP 3.8.6:即使没有注销,身份验证也不会阻止多次登录



我一步一步地学习了CMS教程,在添加登录/身份验证代码之前,一切都很顺利。添加登录代码后,(我已经编辑了现有密码以使用DefaultPasswordHasher并创建了一个新用户(我可以登录,比如说user1,然后,如果我试图通过登录,则无需注销(注销代码已经存在(

localhost:8765/users/login

并以user2的身份登录,它允许我这样做,它应该说"User1已经登录"之类的话,并将我重定向到默认页面。

据我所知,我发现奇怪的b'coz,它使用了当前登录的用户=>不允许多次登录,但Auth组件不会检查用户是否已经登录。实际上,没有什么可以阻止我在浏览器上打开多个选项卡,并以我想要的用户数登录,只要这些用户在数据库中!

此外,当我调用退出页面时

localhost:8765/users/logout

它注销了所有登录的用户,我想b'Cz它为当前登录的用户调用$this->Auth->logout();!虽然,我还没有为用户1调用注销页面,比如说,我为用户2调用了注销页面,两者都已注销,我必须再次以用户1的身份登录!

所以,我的问题是:当用户已经登录并再次请求登录页面时,我该如何处理这种情况?如何处理多个用户同时登录的情况?

您不能同时作为多个用户登录,至少不能开箱即用,在您已经登录的情况下登录,将覆盖/合并以前标识的用户数据,并在使用会话存储时续订会话。因此,虽然您可以在其他选项卡中继续,但您不再是同一用户。但是,存储内容通常不会被清除,因此可能会导致问题。

在您已经登录时阻止登录是您必须在应用程序代码中处理的问题。例如,在您的登录操作中,您可以在运行识别用户并将其持久化的代码之前检查登录用户,例如:

if ($this->Auth->user()) {
$this->Flash->error('You are already logged in.');
return $this->redirect($this->Auth->redirectUrl());
}

也许组件在写入存储之前至少清除特定的密钥是合理的,但这仍然不会阻止登录或从"上一个"会话中删除可能的状态,这是你仍然需要自己处理的事情。

另请参见

  • 食谱>控制器>组件>AuthComponent>访问登录用户

最新更新