从头访问 JWT 令牌

时间:2021-05-27 06:34:59

标签: json laravel jwt token

我正在使用 JWT 令牌在 Laravel 中制作 API,我想制作 CRUD 操作,我已经在 Postman 中测试了我的 API。

现在的问题是我想通过 Laravel 刀片视图实现它,在邮递员中我可以在标题中设置授权承载,我将如何在 Laravel 应用程序中做到这一点?不是在 Postman 中,简而言之,我想设置标头,这样我就可以在每个请求中访问令牌。

控制器:

<?php

class NewController extends Controller
{

    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');
        $token = auth()->attempt($credentials);
        return $this->createNewToken($token);
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|between:2,100',
            'email' => 'required|string|email|max:100|unique:users',
            'password' => 'required|string|confirmed|min:6',
        ]);

        if ($validator->fails()) {
            return response()->json(array(
                "status" => false,
                "errors" => $validator->errors()
            ), 400);
        }

        $user = User::create(array_merge(
            $validator->validated(),
            ['password' => bcrypt($request->password)]
        ));

        return response()->json([
            'status' => true,
            'message' => 'User successfully registered',
            'user' => $user
        ], 201);
    }

    public function refresh()
    {
        return $this->createNewToken(auth()->refresh());
    }

    public function userProfile()
    {
        return $this->getAuthenticatedUser();
    }

    public function me()
    {
        $user = JWTAuth::parseToken()->authenticate();
        return response()->json(array($user), 400);
    }

    protected function createNewToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60,
            'user' => auth()->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());

        }

        return response()->json(compact('user'));
    }
}

路线:

    'prefix' => 'auth',
], function ($router) {
    Route::post('login', [App\Http\Controllers\NewController::class, 'login'])->name('apisignin');
    Route::post('getauth', [App\Http\Controllers\NewController::class, 'getAuthenticatedUser'])->name('getAuthenticatedUser');
    Route::post('userProfile', [App\Http\Controllers\NewController::class, 'userProfile']);
    Route::post('me', [App\Http\Controllers\NewController::class, 'me']);
});

0 个答案:

没有答案