AuthorizingApi.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Firebase\JWT\ExpiredException;
  5. use Firebase\JWT\JWT;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Cache;
  9. class AuthorizingApi
  10. {
  11. /**
  12. * Handle an incoming request.
  13. *
  14. * @param Request $request
  15. * @param Closure $next
  16. * @return mixed
  17. */
  18. public function handle(Request $request, Closure $next)
  19. {
  20. $token = $request->header("token");
  21. if (!$token) return response()->json([
  22. 'message' => '没有认证,请前去认证',
  23. 'status_code' => 401,
  24. ]);
  25. try {
  26. $publicKey = Cache::remember("TOKEN_PUBLIC_KEY",7200,function (){
  27. return file_get_contents(base_path().'/public.pem');
  28. });
  29. }catch (\Exception $e){
  30. $response["status_code"] = 410;
  31. if (strpos($e->getMessage(),"No such file or directory")!==false)$response["message"] = "服务器异常,资源丢失";
  32. else $response["message"] = "访问某些资源失败";
  33. return response()->json($response);
  34. }
  35. try {
  36. $payload = JWT::decode($token, $publicKey, ['RS256']);
  37. $user = app("UserService")->getOrRefreshCache($payload->data->id,$payload->exp);
  38. }catch (ExpiredException $e){
  39. $response["status_code"] = 401;
  40. $response["message"] = "token失效";
  41. return response()->json($response);
  42. } catch (\Exception $e){
  43. $response["status_code"] = 401;
  44. $response["message"] = "token非法";
  45. return response()->json($response);
  46. }
  47. Auth::setUser($user);
  48. return $next($request);
  49. }
  50. }