AuthTokenByMust.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /*
  3. * @Author: your name
  4. * @Date: 2021-04-22 17:20:17
  5. * @LastEditTime: 2021-04-22 17:35:07
  6. * @LastEditors: your name
  7. * @Description: In User Settings Edit
  8. * @FilePath: \10dsm\app\Http\Middleware\AuthTokenByMust.php
  9. */
  10. namespace App\Http\Middleware;
  11. use App\Modes\Proxy;
  12. use App\Modes\User;
  13. use Auth;
  14. use Closure;
  15. use phpDocumentor\Reflection\DocBlock\Tags\Var_;
  16. use Tymon\JWTAuth\Exceptions\JWTException;
  17. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  18. use Tymon\JWTAuth\Exceptions\TokenExpiredException;
  19. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  20. class AuthTokenByMust extends BaseMiddleware
  21. {
  22. /**
  23. * @author fatty
  24. * @date 2019/3/11
  25. * @param $request
  26. * @param Closure $next
  27. * @return mixed
  28. * @description
  29. * 必须认证访问令牌的接口
  30. */
  31. public function handle($request, Closure $next)
  32. {
  33. try {
  34. $this->checkForToken($request);
  35. try {
  36. if ($result = $this->auth->parseToken()->authenticate()) {
  37. //wsl add start
  38. $uid=Auth::id();
  39. $users=User::whereId($uid)->select('status','province','city','district','is_frontend','ssid','updated_at')->first();
  40. if(!empty($users->ssid)&&$request->header('sessid')!=$users->ssid){
  41. return showJson(555,'您的账户已在其他地方登录,您被迫下线');
  42. }
  43. if(!empty($users)&&$users->is_frontend==1){
  44. if($users->status==2){
  45. return showJson(444,'您的账户已被冻结,如有疑问请联系管理员');
  46. }
  47. $proxy=Proxy::where('province','=',$users->province)
  48. ->where('city','=',$users->city)
  49. ->where('district','=',$users->district)->select('status')->first();
  50. if(!empty($proxy)&&$proxy->status==0){
  51. return showJson(444,'您所处的区域已被冻结,如有疑问请联系管理员');
  52. }
  53. }
  54. //wsl add end
  55. return $next($request);
  56. }
  57. return showJson(102, '请登录');
  58. //throw new UnauthorizedHttpException('jwt-auth', '未登录');
  59. } catch (TokenExpiredException $exception) {
  60. $token = $this->auth->refresh();
  61. try {
  62. Auth::guard('api')->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']);
  63. } catch (JWTException $exception) {
  64. return showJson(102, $exception->getMessage());
  65. //throw new UnauthorizedHttpException('jwt-auth', $exception->getMessage());
  66. }
  67. }
  68. return showJson(103, '您的登录信息已过期,请重新登录!', ['token' => $token]);
  69. } catch (\Exception $exception) {
  70. return showJson(102, $exception->getMessage());
  71. }
  72. }
  73. }