AdminApiAuthMiddleware.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Models\User;
  4. use App\Servers\AdminLogsServer;
  5. use App\Servers\PermissionServer;
  6. use App\Servers\RedisDataServer;
  7. use Closure;
  8. class AdminApiAuthMiddleware
  9. {
  10. private $noAuth = [
  11. 'adminApi.token',
  12. 'adminApi.index',
  13. 'adminApi.login',
  14. 'adminApi.logout',
  15. 'adminApi.check_code',
  16. 'adminApi.reset',
  17. 'common.send',
  18. ];
  19. /**
  20. * Handle an incoming request.
  21. *
  22. * @param \Illuminate\Http\Request $request
  23. * @param \Closure $next
  24. * @return mixed
  25. */
  26. public function handle($request, Closure $next)
  27. {
  28. $clientRoute = request()->route()->getName();//获取当前路由
  29. if (in_array($clientRoute, $this->noAuth)) {//不需要验证的路由
  30. return $next($request);
  31. }
  32. //获取token
  33. $api_token = $request->input('api_token');
  34. if(empty($api_token))$api_token=$request->header('ApiToken');
  35. if(empty($api_token)){
  36. return response()->json([
  37. 'msg' => '缺少认证信息',
  38. 'code' => 401,
  39. 'data' => []
  40. ]);
  41. }
  42. //获取当前用户
  43. $user = RedisDataServer::creatServer()->getData( 'adminApiLogin_' . $api_token, 'json');
  44. if(!$user){
  45. //数据库查找当前用户
  46. $user=User::where('api_token',$api_token)->where('status',1)->where('is_del',0)->first();
  47. if($user){
  48. //用户信息缓存
  49. RedisDataServer::creatServer()->setData('adminApiLogin_' . $api_token, $user, 'json', 30);
  50. }else{
  51. return response()->json([
  52. 'msg' => '请先登录',
  53. 'code' => 401,
  54. 'data' => []
  55. ]);
  56. }
  57. }
  58. //进行路由验证
  59. $ret = PermissionServer::verifyAuth($user['roles_id'], $clientRoute);
  60. if (empty($ret) && $user['id'] != 1) {
  61. return response()->json([
  62. 'msg' => '暂无权限',
  63. 'code' => 402,
  64. 'data' => []
  65. ]);
  66. }
  67. $request->admin_user = $user;
  68. //日志记录
  69. AdminLogsServer::write('',$user['id']);
  70. return $next($request);
  71. }
  72. }