在laravel中登录后添加中间件

时间:2016-11-23 09:14:12

标签: php laravel

我正在使用laravel作为我的网络应用程序,在登录时我要求输入用户名,密码,我想检查登录用户的电子邮件是否已经过验证。如果验证状态为0,我想使用名为中间件的verifiedemail将错误消息发送到登录页面。

route.php

Route::group(['middleware' => 'auth', 'superadmin'], function () {
    Route::resource('/users', 'UserController'); 
});
Route::get('/', function () {
    if (Auth::guest())
        return view('/auth/login');
    else
        return redirect('/tests');
});
Route::resource('/tests', 'TestController');
Route::get('/sites', 'SiteController@index'); 
Auth::routes();
Route::get('/home', 'HomeController@index');

Redirectedifauthenticated.php< ---中间件文件

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect('/home');
    }
    return $next($request);
}

verifiedemail.php< ---中间件文件

public function handle($request, Closure $next)
{
    if ( Auth::check() && Auth::user()->isVerifiedEmail() )
    {
        return redirect('/login');
    }
    return $next($request);
}

kernel.php

 protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'superadmin' => 'App\Http\Middleware\SuperAdmin',
        'verifiedemail' => 'App\Http\Middleware\VerifiedEmail',
    ];
}

我认为这些是我必须改变的文件,但我必须改变的地方和地点是我的问题。请事先帮助感谢。

1 个答案:

答案 0 :(得分:1)

如果您正在使用默认的laravel身份验证,则可以在Illuminate\Auth\Events\Attempting上添加一个侦听器,该侦听器会在每次登录尝试时触发,并在侦听器中进行验证。

  

有关fired event on Auth

的更多信息      

有关event listeners

的更多信息