web-dev-qa-db-fra.com

Erreur dans la classe de gestionnaire - Laravel

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.

11
MA-2016

Vous avez oublié d'ajouter use Illuminate\Auth\AuthenticationException en haut de votre fichier

24
Nerea

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');
        }

    }

}
0
Thanh Nguyen