2017-05-17 6 views
0

Ich versuche, einen einfachen Test mit einer Route auf der api.php Datei Tymon JWT Paket mit zu tun:Laravel 5.4 API Route 302 mit Tymon JWT Middle

Route::group(['middleware' => [ 'jwt.auth' ] ], function() 
{ 
    Route::group(['prefix' => 'auth', 'namespace' => 'Auth'], function() { 
     Route::post('get-user') 
     ->name('auth.get_user') 
     ->uses('[email protected]'); 
    }); 
}); 

LoginController @ getAuthenticatedUser ist wie folgt:

// Get authenticated user 
public function getAuthenticatedUser() 
{ 
    try { 

     if (! $user = JWTAuth::parseToken()->authenticate()) { 
     return response()->json(['user_not_found'], 404); 
     } 

    } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { 

     return response()->json(['token_expired'], $e->getStatusCode()); 

    } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { 

     return response()->json(['token_invalid'], $e->getStatusCode()); 

    } catch (Tymon\JWTAuth\Exceptions\JWTException $e) { 

     return response()->json(['token_absent'], $e->getStatusCode()); 

    } 

    // the token is valid and we have found the user via the sub claim 
    return response()->json(compact('user')); 
} 

ich den Code und meine Schlussfolgerung getestet habe, was ich denke, falsch ist, ist, dass auf der Middleware des Pakets, wenn ich die $ user packe ich einen 302-Status auf der Strecke zu bekommen, sonst geht alles gut:

public function handle($request, \Closure $next) 
{ 
    if (! $token = $this->auth->setRequest($request)->getToken()) { 
     return $this->respond('tymon.jwt.absent', 'token_not_provided', 400); 
    } 

    try { 
     $user = $this->auth->authenticate($token); 
    } catch (TokenExpiredException $e) { 
     return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]); 
    } catch (JWTException $e) { 
     return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]); 
    } 

    if (! $user) { 
     return $this->respond('tymon.jwt.user_not_found', 'user_not_found', 404); 
    } 

    $this->events->fire('tymon.jwt.valid', $user); 

    return $next($request); 
} 

Ich sende das JWT korrekt. Ich kann dies beweisen, indem ich die $ user-Variable im obigen Code protokolliere und die Daten überprüfe.

Dies ist der Http/Kernel:

<?php 

namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
     /** 
     * The application's global HTTP middleware stack. 
     * 
     * These middleware are run during every request to your application. 
     * 
     * @var array 
     */ 
     protected $middleware = [ 
       \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
       \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
       \App\Http\Middleware\TrimStrings::class, 
       \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
     ]; 

     /** 
     * The application's route middleware groups. 
     * 
     * @var array 
     */ 
     protected $middlewareGroups = [ 
       'web' => [ 
         \App\Http\Middleware\EncryptCookies::class, 
         \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
         \Illuminate\Session\Middleware\StartSession::class, 
         \Illuminate\Session\Middleware\AuthenticateSession::class, 
         \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
         \App\Http\Middleware\VerifyCsrfToken::class, 
         \Illuminate\Routing\Middleware\SubstituteBindings::class, 
       ], 

       'api' => [ 
         'throttle:60,1', 
         'bindings', 
       ], 
     ]; 

     /** 
     * The application's route middleware. 
     * 
     * These middleware may be assigned to groups or used individually. 
     * 
     * @var array 
     */ 
     protected $routeMiddleware = [ 
       'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
       'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
       'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
       'can' => \Illuminate\Auth\Middleware\Authorize::class, 
       'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
       'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 

       'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, 
       'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class, 
     ]; 
} 

Nachstehend ist ein Screenshot von der Route: enter image description here

Ich weiß nicht, wo man als nächstes zu drehen, irgendwelche Ideen?

+0

Kannst du deine Http/Kernel.php Datei einfügen? – Trent

+0

Hallo da @Trent danke für deine Frage. Ich habe meinen Beitrag bearbeitet. – FPJ

+0

Sind deine Routen oben in den Gruppen "web" oder "api"? –

Antwort

0

Das Problem hier besteht darin, Gast-Middleware in der Route zu haben.

Wenn ich eine Route ohne die "Gast" -Middleware verwende, funktioniert alles entsprechend.

Verwandte Themen