Authenticate.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 (
  20. ! config('admin.auth.enable', true)
  21. || ! Admin::guard()->guest()
  22. || $this->shouldPassThrough($request)
  23. ) {
  24. return $next($request);
  25. }
  26. $loginPage = admin_base_path('auth/login');
  27. if ($request->ajax() && ! $request->pjax()) {
  28. return response()->json(['message' => 'Unauthorized.', 'login' => $loginPage], 401);
  29. }
  30. $response = redirect()->guest($loginPage);
  31. if ($request->pjax()) {
  32. $response->headers->remove('Location');
  33. $response->setStatusCode(200);
  34. return $response->setContent("<script>location.href = '$loginPage';</script>");
  35. }
  36. return $response;
  37. }
  38. /**
  39. * Determine if the request has a URI that should pass through verification.
  40. *
  41. * @param \Illuminate\Http\Request $request
  42. *
  43. * @return bool
  44. */
  45. protected function shouldPassThrough($request)
  46. {
  47. foreach (config('admin.auth.except', []) as $except) {
  48. $except = admin_base_path($except);
  49. if ($except !== '/') {
  50. $except = trim($except, '/');
  51. }
  52. if (Helper::matchRequestPath($except)) {
  53. return true;
  54. }
  55. }
  56. return false;
  57. }
  58. }