Laravel JWT использует промежуточное программное обеспечение вне группы - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь проверить и обновить свой токен при определенных вызовах API, поэтому я создал собственное промежуточное ПО и добавил его в свой Kernel.php $ routeMiddleware. Затем я добавил это в группу промежуточного программного обеспечения, где я хочу проверить и - при необходимости - обновить токен. Однако при входе в систему он также вызывает это промежуточное программное обеспечение, хотя вызов входа в систему не входит в группу промежуточного программного обеспечения, поэтому я получаю ошибку 500: «Невозможно проанализировать токен из запроса». Я также заметил, что промежуточное программное обеспечение вызывается даже при удалении 'cors' из промежуточного программного обеспечения группы ... Любая помощь будет высоко ценится!

Это код промежуточного программного обеспечения:

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        try
        {
            if (! $user = JWTAuth::parseToken()->authenticate() )
            {
                return response()->json(['user_not_found'], 404);
            }
        }
        catch (TokenExpiredException $e)
        {
            try
            {
                $refreshed = JWTAuth::refresh(JWTAuth::getToken());
                $response->header('Authorization', 'Bearer ' . $refreshed);
            }
            catch (JWTException $e)
            {
                return response()->json(['couldnt refresh token'], 404);
            }
            $user = JWTAuth::setToken($refreshed)->toUser();
        }
        catch (JWTException $e)
        {
            return response()->json(['error trying to parse token'], 404);
        }

        Auth::login($user, false);

        return $response;
    }
}

Вот мои маршруты:

Route::group(['middleware' => ['api','jwt.auth', 'cors']], function() {
Route::get('logout', 'AuthController@logout');

Route::get('user', 'AuthController@getUser');

Route::get('movies/{page}', 'MovieController@index');
Route::get('movie/{id}', 'MovieController@getMovieByID');
Route::get('movies/search/{string}', 'MovieController@getMovieByTitleGenreDirector');

Route::get('movie/{id}/recommendations', 'MovieController@getMovieRecommendations');
});

1 Ответ

0 голосов
/ 03 мая 2018

Упс, кажется, я забыл удалить "cors" из моего RouteServiceProvider.php

protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware(['api', 'cors'])
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
}

Теперь работает как положено.

...