Laravel 7.0 - tymon / jwt-auth - проверить, действителен ли токен - PullRequest
0 голосов
/ 24 марта 2020

Попытка достичь конечной точки входа в систему при установке laravel с помощью tymon / jwt-auth (JWT). Логин, выход из системы, получить userdata работает нормально. Я хотел бы иметь конечную точку для проверки токена на предъявителя. Для этого есть короткий способ:

Route::get('/valid', function () {
    return 1;
})->middleware('auth:api');

Если токен действителен, код возврата HTTP == 200, но если нет, возвращается код 401. Поскольку конечная точка проверяет токен, а не аутентифицированную связь, я бы предпочел, чтобы контроллер возвращал истину / ложь относительно действительного токена с 200 - ОК.

Я посмотрел "под капотом" модули, и вот как далеко я (не работает):

            $tokenKey = $request->bearerToken();
            $jws = \Namshi\JOSE\JWS::load($tokenKey);

            $jwsSimple = new SimpleJWS($jws->getHeader());
            $jwsSimple::load($tokenKey);
            $jwsSimple->setPayload($jws->getPayload());
            $jwsSimple->setEncodedSignature(explode('.', $tokenKey)[2]);

            $tmpVal = $jwsSimple->isValid($tokenKey);

Есть ли лучший подход для достижения этой цели? Я предполагаю, что для этого должен быть поставщик услуг, но не могу понять, как это реализовать. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 24 марта 2020

Вы можете удалить промежуточное ПО auth:api и затем получить что-то вроде:

return response()->json([ 'valid' => auth()->check() ]);
1 голос
/ 24 марта 2020

Может быть, вам нужен этот метод:

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

                    }

                    return response()->json(compact('user'));
            }
0 голосов
/ 24 марта 2020

Вот смешанный вывод для достижения проверки токена на основе статуса с помощью laravel и tymon / jwt-auth:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ValidTokenController extends Controller
{
    public function __invoke(Request $request)
    {
        $response = (int) auth('api')->check();
        $responseCode = 200;
        try {
            if (!app(\Tymon\JWTAuth\JWTAuth::class)->parseToken()->authenticate()) {
                $response = 0;
            }
        } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            $response = -1;
        } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            $response = -2;
        } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
            $response = -3;
        }
        return response()->json($response, $responseCode);
    }
}
...