跳至内容

会话验证器

会话身份验证器将用户的身份验证存储在用户的会话中,以及在他们设备上的安全 cookie 中。这是大多数网站中使用的基于密码的标准登录。它支持安全的记住我功能,以及更多功能。它还可以用于处理单页应用程序 (SPA) 的身份验证。

方法参考

attempt()

当用户尝试使用其电子邮件和密码登录时,您将调用身份验证类上的 attempt() 方法,并传入其凭证。

$credentials = [
    'email'    => $this->request->getPost('email'),
    'password' => $this->request->getPost('password')
];

$loginAttempt = auth()->attempt($credentials);

if (! $loginAttempt->isOK()) {
    return redirect()->back()->with('error', $loginAttempt->reason());
}

在成功 attempt() 后,用户登录。返回的响应对象将提供作为 extraInfo() 登录的用户。

$result = auth()->attempt($credentials);

if ($result->isOK()) {
    $user = $result->extraInfo();
}

如果尝试失败,则会触发 failedLogin 事件,其中凭证数组作为唯一参数。无论是否通过,登录尝试都会记录在 auth_logins 表中。

如果 Auth 配置文件中的 allowRememberingtrue,则可以告诉会话身份验证器设置一个安全的记住我 cookie。

$loginAttempt = auth()->remember()->attempt($credentials);

check()

如果您想检查用户的凭证而不登录,则可以使用 check() 方法。

$credentials = [
    'email'    => $this->request->getPost('email'),
    'password' => $this->request->getPost('password')
];

$validCreds = auth()->check($credentials);

if (! $validCreds->isOK()) {
    return redirect()->back()->with('error', $validCreds->reason());
}

返回的结果实例包含有效的用户作为 extraInfo()

loggedIn()

您可以使用恰如其名的方法 loggedIn() 确定用户当前是否已登录。

if (auth()->loggedIn()) {
    // Do something.
}

logout()

您可以调用 logout() 方法使用户退出当前会话。这将销毁并重新生成当前会话,清除此用户当前的任何记住我令牌,并触发 logout 事件。

auth()->logout();

forget()

forget 方法将清除当前用户的全部记住我令牌,使其在下次访问网站时不会被记住。

事件和日志记录

以下是会话身份验证器的事件和日志记录列表。

注册

  • 默认注册
    • 发布电子邮件/用户名/密码
      • 确定 → 事件 registerlogin
      • 否定 → 无事件
  • 使用电子邮件激活注册
    1. 发布电子邮件/用户名/密码
      • 确定 → 事件 register
      • 否定 → 无事件
    2. 发布令牌
      • 确定 → 事件 login
      • 否定 → 无事件

登录

  • 默认登录
    • 发布电子邮件/密码
      • 确定 → 事件 login / 表格 auth_logins
      • 否定 → 事件 failedLogin / 表格 auth_logins
  • 电子邮件 2FA 登录
    1. 发布电子邮件/密码
      • 确定 → 无事件 / 表格 auth_logins
      • 否定 → 事件 failedLogin / 表格 auth_logins
    2. 发布令牌
      • 确定 → 事件 login
      • 否定 → 无事件
  • 记住我
    • 发送不带会话 Cookie 的记住我 Cookie
      • 确定 → 无事件
      • 否定 → 无事件
  • 魔术链接
    1. 发布电子邮件
      • 确定 → 无事件
      • 否定 → 无事件
    2. 发送带有令牌的请求
      • 确定 → 事件 loginmagicLogin / 表格 auth_logins
      • 否定 → 事件 failedLogin / 表格 auth_logins