2016-11-15 111 views
4

我嘗試使用Laravel 5.3的Auth腳手架包括api路由。我想爲api後衛使用會話驅動程序,但顯然這沒有任何影響。在用有效用戶登錄應用程序(所以我從/login/home)之後,我嘗試輸入路徑/api/user,但它總是將我重定向到/homeRedirectIfAuthenticated中間件重定向用戶。基於Laravel會話的auth:api中間件不工作

下面是我嘗試和測試應用程序的快速概覽:

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

$guard爲空,而如果是真正的瀏覽到/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, 
], 

我加入了中間件支持cookies在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中間件組和中間件應用於它。在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

不,我現在只在api路由組中使用'auth'。無法弄清楚爲什麼它不會工作... – Johannes

+0

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

回答

0

我有幸被重定向到/ home在訪問我的API的路線,即使我已經登錄了同樣的問題。 嘗試改變Kernel.php和地點「綁定」你的API中間件的順序在最後一個位置,所以您的自定義中間件首先被執行。

+1

感謝您的回覆 - 我所缺少的是在綁定之前開始會話類! –