Laravel 5.2 : 登录 "attempt" 事件处理

Laravel 5.2 : Login "attempt" Event Handling

在 Laravel 5.2 中,我需要在 触发身份验证过程时做一些事情。 (不是 "after" 登录。)

这是我所做的。

EventServiceProvider.php中:

protected $listen = [
  'Illuminate\Auth\Events\Attempting' => ['App\Listeners\UserLoginAttempt@handle'],
];

app/Listeners/UserLoginAttempt.php中:

<?php
namespace App\Listeners;

use Illuminate\Http\Request;
use Illuminate\Auth\Events\Login;
use Carbon\Carbon;
use Auth;

class UserLoginAttempt
{
    public function __construct()
    {

    }

    public function handle($event)
    {
        dd(Auth::user());
        exit;
    }
}

这总是returnsnull

** 事实上,我在登录表单中有一个 "custom" 字段,我需要从上面的事件处理程序中捕获它。 (在 实际登录事件完成之前,我需要检查一些东西 。)

  • 我如何从这个 (Illuminate\Auth\Events\Attempting) 处理程序中捕获 Auth::user()
  • (换句话说)我如何与 (Illuminate\Auth\Events\Attempting) 处理程序的登录表单对话?
  • 或 ----- Auth::user() 对象是否仅在登录完全处理后创建?这意味着我在 "attempting" 阶段无法获得它?

因为我需要先捕获 登录元素,如果它是某种东西 "unauthorized" (在 Handler 中完成一些计算之后),然后我需要终止登录尝试并从这里路由回登录表单。通过携带失败消息。

请让我知道我在这里缺少什么。谢谢。

根据 documentation 你是对的 Auth::user() 对象仅在用户通过身份验证时创建。

在 Illuminate\Auth\Events\Attempting 侦听器内部; 您可以通过

捕获表单字段
public function handle(Attempting $event)
{
      //return dd($event); // will echo all fields
      $event->credentials['email']; // capturing the email field
}

您还可以使用用户模型,然后访问数据库中的用户 table,以获取/检查数据库中的用户字段...