2016-09-22 26 views
1

セッションガードがあり、それで十分でした。Laravel 5.2:同じルート上のセッションとトークンガード

トークン(ヘッダーまたはGETパラメーター)とセッションを経由して同じルートに承認を追加する必要があります。

トークン経由の承認はステートレスでなければなりません。

UPD: まず、重複ルートの作成について考えます。 セッションの一つとトークン

// api token auth 
// url: /api/test 
Route::group(['middleware' => ['web', 'auth:api'], 'prefix' => 'api', 'as' => 'api.'], function() { 
    Route::resource('test', 'TestController'); 
    // 50+ routes 
}); 

// session auth 
// url: /test 
Route::group(['middleware' => ['web', 'auth']], function() { 
    Route::resource('test', 'TestController'); 
    // 50+ routes 
}); 

のための1が、URLが異なっているので、それは、私たちが望むものではありません。

多分、誰かがこの問題を解決する方法を知っていますか?

答えて

5

新しいミドルウェアAuthenticateWithTokenを作成します。

class AuthenticateWithToken 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     if (($user = Auth::guard('api')->user())) { 
      Auth::setUser($user); 
     } 

     return $next($request); 
    } 
} 

がHTTP/Kernel.phpでそれを宣言します。

/** 
* The application's route middleware. 
* 
* These middleware may be assigned to groups or used individually. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    // ... 
    'auth.api' => \App\Http\Middleware\AuthenticateWithToken::class, 
    // ... 
]; 

、デフォルトの前routes.phpの中に 'AUTH' ミドルウェアを、それを追加します。

Route::group(['middleware' => ['web', 'auth.api', 'auth']], function() { 
    Route::resource('test', 'TestController'); 
    // 50+ routes 
}); 
+0

あなたは私の一日を、ありがとう!!!! –

+0

トークンガードの代わりにパスポートを使用して同じことをする方法はありますか? – Mike

+0

Nevermindは他のものなしで 'auth.api'ミドルウェアを使用しなければなりませんでした – Mike

関連する問題