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

我一步一步地遵循了CMS Tutorial,直到我添加了用于登录/身份验证的代码为止,一切都运转良好。添加login code之后,(我已经编辑了现有的密码以使用DefaultPasswordHasher并创建了一个新用户)我能够以user1的身份登录,然后无需注销(注销代码已经存在) ),如果我尝试通过以下方式登录

localhost:8765/users/login

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

据我所知,我觉得很奇怪,它使用当前登录的用户=>不允许多次登录,但是Auth组件不会检查用户是否已经登录。 ,没有什么可以阻止我在浏览器中打开多个选项卡并以任意数量的用户身份登录,只要这些用户在数据库中即可!

此外,当我调用注销页面时

localhost:8765/users/logout

它注销所有已登录的用户,我想b'coz会为当前已登录的用户调用$this->Auth->logout();! 虽然我没有调用user1的注销页面,但是,我已经调用过user2的注销,但是两者都已注销,我必须再次以user1身份登录!

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

esoko 回答:CakePHP 3.8.6:即使未完成注销,身份验证也不会阻止多次登录

您实际上不能同时作为多个用户登录,至少不能立即使用,要在已经登录的情况下登录,将覆盖/合并先前标识的用户数据,并更新会话如果您正在使用会话存储。因此,尽管您可以继续使用其他标签,但是您不再通过身份验证。但是,通常不会清除存储内容,这可能会导致问题。

在您已经登录时防止登录是必须在应用程序代码中处理的事情。例如,在登录操作中,您可以在运行标识用户并保留用户的代码之前检查登录用户,例如:

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

    return $this->redirect($this->Auth->redirectUrl());
}

对于组件来说,在写入存储之前至少清除特定键可能是合理的,但这仍然不能阻止登录或从“上一个”会话中删除可能的状态,这仍然是您需要做的要好好照顾自己。

另请参见

本文链接:https://www.f2er.com/3093909.html

大家都在问