在每个 API 请求中传递 JWT 令牌
Posted
技术标签:
【中文标题】在每个 API 请求中传递 JWT 令牌【英文标题】:Pass JWT Token in Each API Request 【发布时间】:2021-08-16 09:23:18 【问题描述】:您好,我正在使用 JWT Token,并且我正在使用 postman 测试 API,当使用 Postman 执行操作时,我在 postman 的 Header 中设置了不记名标头,它与 Postman 一起工作正常, 但是,如果我不想在邮递员标头中设置它并从控制器传递它怎么办? 任何解决方案都会有帮助, 这是我的代码,
控制器,
public function login(Request $request)
$credentials = $request->only('email', 'password');
$token = auth()->attempt( $credentials);
return $this->createNewToken($token);
public function me()
$user =$this->getAuthenticatedUser();
return response()->json(array($user));
protected function createNewToken($token)
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 1200,
'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'));
Route::post('login', [App\Http\Controllers\NewController::class, 'login'])->name('apisignin');
Route::group([
'middleware' => 'jwt.verify',
'prefix' => 'auth',
], function ($router)
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']);
Route::post('authheader', [App\Http\Controllers\NewController::class, 'authHeader']);
Route::post('userupdate', [App\Http\Controllers\NewController::class, 'userUpdate']);
Route::post('refresh', [App\Http\Controllers\AuthController::class, 'refresh']);
Route::post('getAuthenticatedUser', [App\Http\Controllers\NewController::class, 'getAuthenticatedUser']);
);
public function handle($request, Closure $next)
try
$user = JWTAuth::parseToken()->authenticate();
catch (Exception $e)
if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException)
return response()->json(['status' => 'Token is Invalid']);
else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException)
return response()->json(['status' => 'Token is Expired']);
else
return response()->json(['status' => 'Authorization Token not found']);
return $next($request);
【问题讨论】:
这取决于您用于执行请求的技术。例如,Axios 库允许您设置 default headers。 【参考方案1】:根据您的问题,您需要从控制器发出 API 请求。
为了在此处放置令牌,只需在 Illuminate\Support\Facades\Http
外观上使用 withToken($token)
方法:
Http::withToken($token)->get($url, $parameters)
Laravel 文档:https://laravel.com/docs/8.x/http-client#bearer-tokens
【讨论】:
基本上我想为每个 API 请求设置它 您应该有某种类来发出 API 请求。我通常会创建一个方法 request($params, $method = 'get') 来为典型请求准备所有必要的数据。 好的,知道了,谢谢!以上是关于在每个 API 请求中传递 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章
使用过期令牌发出同时 API 请求时如何避免多个令牌刷新请求