Commit 3ddaf3f9 authored by Taylor Otwell's avatar Taylor Otwell

Merge pull request #3783 from JosephSilber/authenticate

[5.3] Make the Authenticate middleware throw an AuthenticationException
parents c332ad95 d26314de
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Exceptions; namespace App\Exceptions;
use Exception; use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
...@@ -17,12 +18,29 @@ class Handler extends ExceptionHandler ...@@ -17,12 +18,29 @@ class Handler extends ExceptionHandler
* @var array * @var array
*/ */
protected $dontReport = [ protected $dontReport = [
AuthenticationException::class,
AuthorizationException::class, AuthorizationException::class,
HttpException::class, HttpException::class,
ModelNotFoundException::class, ModelNotFoundException::class,
ValidationException::class, ValidationException::class,
]; ];
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $e
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function unauthenticated($request, AuthenticationException $e)
{
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
/** /**
* Report or log an exception. * Report or log an exception.
* *
......
...@@ -4,6 +4,7 @@ namespace App\Http\Middleware; ...@@ -4,6 +4,7 @@ namespace App\Http\Middleware;
use Closure; use Closure;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\AuthenticationException;
class Authenticate class Authenticate
{ {
...@@ -14,40 +15,38 @@ class Authenticate ...@@ -14,40 +15,38 @@ class Authenticate
* @param \Closure $next * @param \Closure $next
* @param string ...$guards * @param string ...$guards
* @return mixed * @return mixed
*
* @throws \Illuminate\Auth\AuthenticationException
*/ */
public function handle($request, Closure $next, ...$guards) public function handle($request, Closure $next, ...$guards)
{ {
if ($this->check($guards)) { $this->authenticate($guards);
return $next($request);
}
if ($request->ajax() || $request->wantsJson()) { return $next($request);
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
} }
/** /**
* Determine if the user is logged in to any of the given guards. * Determine if the user is logged in to any of the given guards.
* *
* @param array $guards * @param array $guards
* @return bool * @return void
*
* @throws \Illuminate\Auth\AuthenticationException
*/ */
protected function check(array $guards) protected function authenticate(array $guards)
{ {
if (empty($guards)) { if (count($guards) <= 1) {
return Auth::check(); Auth::guard(array_first($guards))->authenticate();
return Auth::shouldUse($guard);
} }
foreach ($guards as $guard) { foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) { if (Auth::guard($guard)->check()) {
Auth::shouldUse($guard); return Auth::shouldUse($guard);
return true;
} }
} }
return false; throw new AuthenticationException;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment