Laravel 5.2:登录“尝试”事件处理

时间:2016-05-11 12:09:52

标签: authentication login event-handling laravel-5.2 custom-fields

在Laravel 5.2中,我需要做一些,而正在触发身份验证过程。 (不是“登录后”。)

以下是我的所作所为。

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;
    }
}

这总是返回null

**实际上,我在登录表单中有一个“自定义”字段,我需要从上面的事件处理程序中捕获。 (我需要在实际登录事件完成之前检查。)

  • 如何从此处捕获Auth::user()(Illuminate \ Auth \ Events \ Attempting)处理程序?
  • (换句话说)我如何通过(Illuminate \ Auth \ Events \ Attempting)处理程序与登录表单交谈?
  • OR -----仅在登录完全处理后才创建Auth::user()对象?这意味着在“尝试”阶段我无法得到它?

因为我需要首先捕获登录元素,如果它是“未经授权的”(在Handler中完成一些计算之后),那么我需要终止登录尝试并从此处返回登录表单..通过携带失败消息。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Illuminate \ Auth \ Events \ Attempting listener; 您可以通过

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

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