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

, но это не то, что мы хотим, потому что URLs разные.

Возможно, кто-нибудь знает, как решить эту проблему?

ответ

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

Смежные вопросы