Laravel 7.0-tymon / jwt-auth-检查令牌是否有效

时间:2020-03-24 08:04:41

标签: laravel jwt jwt-auth

尝试通过使用tymon / jwt-auth(JWT)在laravel安装中实现登录端点。登录,注销,获取用户数据工作正常。我想要一个用于检查Bearer令牌的端点。有一个简短的方法可以通过以下方式实现此目的:

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

如果令牌有效,则HTTP返回代码== 200,但如果无效,则返回401代码。由于端点正在检查令牌,而不是经过身份验证的通信,因此,我希望控制器以200-OK返回有关有效令牌的true / false。

我看了模块的“内幕”,那是我能走多远(不工作):

            $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 个答案:

答案 0 :(得分:4)

您可以删除auth:api中间件,然后添加类似以下内容的文件:

return response()->json([ 'valid' => auth()->check() ]);

答案 1 :(得分:1)

也许此方法需要您:

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

答案 2 :(得分:0)

以下是混合输出,可使用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);
    }
}