2016-09-22 7 views
1

Wir hatten Session Guard und das war genug.Laravel 5.2: Session und Token Guard auf den gleichen Routen

Jetzt müssen wir die Autorisierung über Token (in Kopfzeilen oder GET-Parameter) und über die Sitzung auf denselben Routen hinzufügen.

Die Autorisierung über Token muss zustandslos sein.

UPD: Zuerst denken wir über das Erstellen von Dubplicate-Routen. Eine für Sitzung und eine für Token

// 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 
}); 

aber es ist nicht das, was wir wollen, weil Urls unterschiedlich sind.

Vielleicht kann jemand dieses Problem lösen?

Antwort

5

AuthenticateWithToken neue Middleware erstellen:

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); 
    } 
} 

Deklarieren es in 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, 
    // ... 
]; 

Und es hinzufügen, bevor default 'Auth' Middleware in routes.php:

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

Sie machen meinen Tag, danke !!!! –

+0

Irgendeine Idee, wie man die gleiche Sache aber unter Verwendung des Passes anstelle des Markenschutzes tut? – Mike

+0

Nevermind musste nur 'auth.api' Middleware ohne andere verwenden – Mike

Verwandte Themen