Authenticate.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace Dcat\Admin\Http\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. if ($request->pjax()) {
  31. return response("<script>location.href = '$loginPage';</script>");
  32. }
  33. return redirect()->guest($loginPage);
  34. }
  35. /**
  36. * Determine if the request has a URI that should pass through verification.
  37. *
  38. * @param \Illuminate\Http\Request $request
  39. *
  40. * @return bool
  41. */
  42. public static function shouldPassThrough($request)
  43. {
  44. $excepts = array_merge(
  45. (array) config('admin.auth.except', []),
  46. Admin::context()->getArray('auth.except')
  47. );
  48. foreach ($excepts as $except) {
  49. if ($request->routeIs($except) || $request->routeIs(admin_route_name($except))) {
  50. return true;
  51. }
  52. $except = admin_base_path($except);
  53. if ($except !== '/') {
  54. $except = trim($except, '/');
  55. }
  56. if (Helper::matchRequestPath($except)) {
  57. return true;
  58. }
  59. }
  60. return false;
  61. }
  62. }