2016-11-15 72 views
4

私はAPIルートを含むLaravel 5.3のAuth Scaffoldingを使ってみました。私はapiガードのためにセッションドライバを使用したかったのですが、明らかにこれは何の影響もありません。有効なユーザーでアプリケーションにログインした後(/loginから/homeに)、/api/userというパスを入力しようとしましたが、常に/homeにリダイレクトされます。 RedirectIfAuthenticatedミドルウェアは、ユーザーをリダイレクトします。Laravelセッションベースの認証:apiミドルウェアが動作しない

// In "app\Http\Middleware\RedirectIfAuthenticated.php" 
if (Auth::guard($guard)->check()) { 
    return redirect('/home'); 
} 

$guardがnullであり、真である場合/api/userにブラウズ時:ここで

は、私が試したし、テストアプリケーションの概要ものです。

// In "config\auth.php" 
'api' => [ 
    'driver' => 'session', // changed from token to session 
    'provider' => 'users', 
], 

私は、apiガードのドライバをsessionに変更しました。

// In "app\Http\Kernel.php" 
'api' => [ 
    'throttle:60,1', 
    'bindings', 
    \App\Http\Middleware\EncryptCookies::class, 
    \Illuminate\Session\Middleware\StartSession::class, 
], 

私はAPIのミドルウェアでクッキー

// In "routes\api.php" 
Route::get('/user', function (Request $request) { 
    return $request->user(); 
})->middleware('auth:api'); 

をサポートするためのミドルウェアを追加しましたこれは、新しいLaravelのインストールに付属している例です。

// In "app\Providers\RouteServiceProvider.php" 
Route::group([ 
    'middleware' => 'api', 
    'namespace' => $this->namespace, 
    'prefix' => 'api', 
], function ($router) { 
    require base_path('routes/api.php'); 
}); 

apiミドルウェアはapi.phpファイルで定義されたすべてのルートに適用されます。

私は、ユーザーがトークンを使用せずにログインした後に私のAPIを照会することができるようにしたい、など私はLaravel 5.2で書いたアプリは基本的に同じルートが、それに適用されるだけwebミドルウェアグループとauthミドルウェアを持っていました。 Laravel 5.3では、authミドルウェアを追加すると、上記の問題が発生します。

編集:私の構成では、私は次のことを試してみました:

// In "routes\web.php" 
Route::get('/test', function (Request $request) { 
    return "test"; 
})->middleware(['auth']); 

webapiガードがauth.phpの内側にまったく同じですが、これは完全に正常に動作しますが、これはしません。

Route::get('/test', function (Request $request) { 
    return "test"; 
})->middleware(['auth:api']); 
+0

解決方法を見つけましたか? – Notflip

+0

いいえ、私はauthを使用していますが、今のところapi Routeグループにあります。なぜそれが動作しないのか分からなかった... – Johannes

+0

@Notflip fyi:http://stackoverflow.com/questions/40040226/route-not-found-after-adding-authapi-middleware-laravel-5-3 – Johannes

答えて

0

私は私が既にログインされた場合でも、私のAPIのルートへのアクセス中/ホームにリダイレクトばかりの同じ問題を持っていた。 はKernel.phpと場所「バインディング」であなたのAPIのミドルウェアの順番を変更してみてくださいあなたのカスタムミドルウェアが最初に実行されるように、最後の位置に配置します。

+1

この返答いただきありがとうございます。欠落していたのは、バインディングの前にセッションの開始クラスがあることでした。 –

関連する問題