Laravel 5.2 でセッションがNULLになる時はミドルウェアを疑え
あけましておめでとうございます。今年もよろしくお願いします。
まずはこちらのエントリを参照してみてください。
Laravel 5.2 socialite twitter認証で$this->request->getSession()がnull | Romantique 76
はい、タイトルまんま。Laravel 5.2 でミドルウェアグループという機能ができました。複数のミドルウェアに名前をつけて登録できるというものです。で、この機能が実装されたため、5.1 でグローバルミドルウェアとして登録されていたものが web
という名前のミドルウェアグループになってます(グローバルミドルウェアに登録されているのはメンテナンスチェックのみ)。
コードだと App\Http\Kernel
クラスがそれになります。
アドベントカレンダーに書いてなくて申し訳ない。
https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php#L26
そんなわけで、今までどおり書いてしまうとセッション等のミドルウェアを通過しなくなるので、なぜかセッションが作られない…どういうことなの…? となります注意してくださいね。下記のように書けばOKです。
<?php Route::group(['middleware' => ['web']], function () { Route::get('/', function () { if (! Auth::check()) { return Redirect::to('github/authorize'); } }); Route::get('{provider}/authorize', function ($provider) { // ソーシャルログイン処理 return Socialite::with($provider)->redirect(); }); Route::get('{provider}/login', function ($provider) { // ユーザー情報取得 $userData = Socialite::with($provider)->user(); dd($userData); }); });
RateLimit とか MultiAuth とか、書いてない新機能もありますので近いうちに書きます。