J'utilise Laravel 5.5 et j'essaie d'implémenter l'authentification multiple pour les utilisateurs et l'administrateur. J'obtiens cette erreur lorsque j'essaie d'appeler le formulaire de connexion administrateur dans le navigateur.
Erreur :
La déclaration App\Exceptions\Handler :: unauthenticated ($ request, App\Exceptions\AuthenticationException $ exception) doit être compatible avec Illuminate\Foundation\Exceptions\Handler :: unauthenticated ($ request, Illuminate\Auth\AuthenticationException $ exception)
Voici ma fonction non authentifiée dans app/Exceptions/Handler
:
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(), 0);
switch ($guard) {
case 'admin':
$login = 'admin.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
Veuillez m'aider à résoudre ce problème.
Vous avez oublié d'ajouter use Illuminate\Auth\AuthenticationException
en haut de votre fichier
J'utilise Laravel 7.X
Et je préfère le faire dans le middleware Authenticate
Je l'ai fait comme ci-dessous et ça marche bien pour moi.
namespace App\Http\Middleware;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Support\Arr;
class Authenticate extends Middleware
{
protected $guards = [];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string[] ...$guards
* @return mixed
*
* @throws \Illuminate\Auth\AuthenticationException
*/
public function handle($request, Closure $next, ...$guards)
{
$this->guards = $guards;
return parent::handle($request, $next, ...$guards);
}
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if (Arr::first($this->guards) === 'admin') {
return route('admin.login');
}
return route('trainee.login');
}
}
}