Laravelでのmiddlewareをいじって認証直後の処理を作りたいときなど。
例えばログイン後、ユーザーidに応じた共通処理などをかませたいときです。
この場合、当然ログインの後に処理を実行しなくてはいけないので、authの直後に処理を行う必要があります。
まずはサンプルソースを。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ //ここに設定するとすべてで自動実行される protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \App\Http\Middleware\BeforeMiddleware::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \App\Http\Middleware\TrimStrings::class, ]; /** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\SentryContext::class, ] ]; /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::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, 'original_auth' =>\App\Http\Middleware\OriginalAuth::class, ]; } |
app/Http/Middleware/OriginalAuth.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php namespace App\Http\Middleware; use App\Model\Shop; use Closure; use Illuminate\Support\Facades\Auth; class OriginalAuth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { //何らかの処理 return $next($request); } } |
route/web.php
1 2 3 4 |
//下記のように書いておくとauthの後にoriginal_authが行われます。 Route::group(['middleware' => ['auth','original_auth']], function () { ルーティング }) |
注意点として、Kernelのprotected $middlewareやprotected $middlewareGroupに入れてしまうとauthの前に発動してしまいます。(Laravelのauthを使っている場合ですが・・)
もちろんKernelで定義しておかないと使うことはできません。
そこでprotected $routeMiddlewareで定義しておき(ここはrouteで使う用であくまで定義なので実行はされません。),routeの方でauthの後に書いてあげればauth後の処理(具体的にはログインユーザーの情報)を行うことができます。