2016-09-22 4 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 
}); 

에 대한하지만 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에서 '인증'미들웨어 :

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

당신은 내 하루, 감사합니다 !!!! –

+0

똑같은 일을 어떻게하지만 토큰 가드 대신 여권을 사용하는 것이 좋을까요? – Mike

+0

Nevermind는 다른 사람없이 'auth.api'미들웨어를 사용해야했습니다. – Mike