web-dev-qa-db-ja.com

Laravel 5.2認証が機能しない

ご存知のようにLaravel 5.2は数日前にリリースされました。この新しいバージョンを試しています。CLIで次のコマンドを使用して新しいプロジェクトを作成しました。

_laravel new testapp
_

Authentication Quickstartのドキュメント に従って、次のコマンドに従ってルートと認証のビューを足場にしました。

_php artisan make:auth
_

うまくいきました。登録は正常に機能しています。しかし、ログインで問題に直面しています。ログイン後、route.phpファイルで以下をテストしました。

_   Route::get('/', function () {
    dd( Auth::user());
    return view('welcome');
});
_

Auth::user()nullを返していますが、Auth::check()Auth::guest()も適切に動作していません。新しいプロジェクトを作成して、同じことを何度も何度も試みましたが、正しい結果を得ることができませんでした。

以下は完全な_route.php_です

_    <?php

/*
|--------------------------------------------------------------------------
| Routes File
|--------------------------------------------------------------------------
|
| Here is where you will register all of the routes in an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::get('/', function () {
    dd( Auth::());
    return view('welcome');
});

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/

Route::group(['middleware' => ['web']], function () {
    //
});

Route::group(['middleware' => 'web'], function () {
    Route::auth();

    Route::get('/home', 'HomeController@index');
});
_

誰も私を助けることができますか?または誰かが同じ問題に直面していますか?どうすれば修正できますか?

18
Hassan Saqib

Laravel 5.2では、 ミドルウェアグループ の概念が導入されています。1つ以上のミドルウェアがグループに属することを指定でき、適用できます1つ以上のルートへのミドルウェアグループ

デフォルトではLaravel 5.2はミドルウェア処理セッションと他のhttpユーティリティをグループ化するために使用されるwebという名前のグループを定義します:

protected $middlewareGroups = [
'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
],

したがって、セッション処理が必要な場合は、認証を使用するすべてのルートにこのミドルウェアグループを使用する必要があります。

Route::group( [ 'middleware' => ['web'] ], function () 
{
    //this route will use the middleware of the 'web' group, so session and auth will work here         
    Route::get('/', function () {
        dd( Auth::user() );
    });       
});

LARAVELバージョン> = 5.2.27の更新

Laravel 5.2.27バージョンでは、routes.phpで定義されているすべてのルートはデフォルトでwebミドルウェアグループを使用しています。これはapp/Providers/RouteServiceProvider.php

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web'
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}

したがって、webミドルウェアグループを手動でルートに追加する必要はありません。

とにかく、ルートにデフォルトの認証を使用したい場合、authミドルウェアをルートにバインドする必要があります

29
Moppo