Authenticate.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace Dcat\Admin\Middleware;
  3. use Closure;
  4. use Dcat\Admin\Admin;
  5. use Dcat\Admin\Support\Helper;
  6. use Illuminate\Http\Request;
  7. class Authenticate
  8. {
  9. /**
  10. * Handle an incoming request.
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @param \Closure $next
  14. *
  15. * @return mixed
  16. */
  17. public function handle($request, Closure $next)
  18. {
  19. if (Admin::guard()->guest() && ! $this->shouldPassThrough($request)) {
  20. $loginPage = admin_base_path('auth/login');
  21. if ($request->ajax() && ! $request->pjax()) {
  22. return response()->json(['message' => 'Unauthorized.', 'login' => $loginPage], 401);
  23. }
  24. $response = redirect()->guest($loginPage);
  25. if ($request->pjax()) {
  26. $response->headers->remove('Location');
  27. $response->setStatusCode(200);
  28. return $response->setContent("<script>location.href = '$loginPage';</script>");
  29. }
  30. return $response;
  31. }
  32. return $next($request);
  33. }
  34. /**
  35. * Determine if the request has a URI that should pass through verification.
  36. *
  37. * @param \Illuminate\Http\Request $request
  38. *
  39. * @return bool
  40. */
  41. protected function shouldPassThrough($request)
  42. {
  43. foreach (config('admin.auth.except', []) as $except) {
  44. $except = admin_base_path($except);
  45. if ($except !== '/') {
  46. $except = trim($except, '/');
  47. }
  48. if (Helper::matchRequestPath($except)) {
  49. return true;
  50. }
  51. }
  52. return false;
  53. }
  54. }