Browse Source

Merge pull request #3685 from JosephSilber/multi-auth

Allow passing multiple gaurds to the auth middleware
Taylor Otwell 8 years ago
parent
commit
4f4d378d6a
1 changed files with 29 additions and 8 deletions
  1. 29 8
      app/Http/Middleware/Authenticate.php

+ 29 - 8
app/Http/Middleware/Authenticate.php

@@ -12,19 +12,40 @@ class Authenticate
      *
      * @param  \Illuminate\Http\Request  $request
      * @param  \Closure  $next
-     * @param  string|null  $guard
+     * @param  string  ...$guards
      * @return mixed
      */
-    public function handle($request, Closure $next, $guard = null)
+    public function handle($request, Closure $next, ...$guards)
     {
-        if (Auth::guard($guard)->guest()) {
-            if ($request->ajax() || $request->wantsJson()) {
-                return response('Unauthorized.', 401);
-            } else {
-                return redirect()->guest('login');
+        if ($this->check($guards)) {
+            return $next($request);
+        }
+
+        if ($request->ajax() || $request->wantsJson()) {
+            return response('Unauthorized.', 401);
+        } else {
+            return redirect()->guest('login');
+        }
+    }
+
+    /**
+     * Determine if the user is logged in to any of the given guards.
+     *
+     * @param  array  $guards
+     * @return bool
+     */
+    protected function check(array $guards)
+    {
+        if (empty($guards)) {
+            return Auth::check();
+        }
+
+        foreach ($guards as $guard) {
+            if (Auth::guard($guard)->check()) {
+                return true;
             }
         }
 
-        return $next($request);
+        return false;
     }
 }