web-dev-qa-db-fra.com

Comment changer l'URL de redirection par défaut du filtre Laravel 5 Auth?

Par défaut, si je ne suis pas connecté et que j'essaie de visiter ceci dans le navigateur:

http://localhost:8000/home

Il me redirige vers http://localhost:8000/auth/login

Comment puis-je changer pour me rediriger vers http://localhost:8000/login

19
Vladimir

Je voulais faire la même chose dans Laravel 5.5. Le traitement de l'authentification a été déplacé vers Illuminate\Auth\Middleware\Authenticate, ce qui génère un Illuminate\Auth\AuthenticationException.

Cette exception est gérée dans Illuminate\Foundation\Exceptions\Hander.php, mais vous ne souhaitez pas modifier les fichiers du fournisseur d'origine. Vous pouvez donc l'écraser avec vos propres fichiers de projet en l'ajoutant à App\Exceptions\Handler.php.

Pour ce faire, ajoutez ce qui suit en haut de la classe Handler dans App\Exceptions\Handler.php:

use Illuminate\Auth\AuthenticationException;

Et ajoutez ensuite la méthode suivante, en modifiant si nécessaire:

/**
 * Convert an authentication exception into an unauthenticated response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Auth\AuthenticationException  $exception
 * @return \Illuminate\Http\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest('login'); //<----- Change this
}

Il suffit de changer return redirect()->guest('login'); en return redirect()->guest(route('auth.login')); ou quoi que ce soit d'autre.

Je voulais l'écrire parce qu'il m'a fallu plus de 5 minutes pour le comprendre. S'il vous plaît laissez-moi un mot si vous avez trouvé cela dans la documentation parce que je ne pouvais pas.

39
Moritz Ewert

Juste pour prolonger la réponse de @ ultime:

  1. Vous devez modifier la méthode App\Http\Middleware\Authenticate::handle() et remplacer auth/login par /login.
  2. Ensuite, vous devez ajouter la propriété $loginPath à votre classe \App\Http\Controllers\Auth\AuthController. Pourquoi? Voir source Laravel .

En conséquence, vous aurez ceci dans votre middleware:

namespace App\Http\Middleware;
class Authenticate {
        /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->guest())
        {
            if ($request->ajax())
            {
                return response('Unauthorized.', 401);
            }
            else
            {
                return redirect()->guest('/login'); // <--- note this
            }
        }

        return $next($request);
    }
}

Et ceci dans votre AuthController:

namespace App\Http\Controllers\Auth;
class AuthController extends Controller
{
    protected $loginPath = '/login'; // <--- note this

    // ... other properties, constructor, traits, etc 
}
29
e1v

Ceci est Laravel 5.4 Solution:

Il existe une nouvelle méthode unauthenticated () dans app/Exceptions/Handler.php qui gère les utilisateurs non authentifiés et les redirige vers le chemin de connexion.

Alors change

return redirect()->guest('login');

à

return redirect()->guest('auth/login');
10
Salil Kothadia

Les vérifications d'authentification sont effectuées à l'aide d'un middleware dans Laravel 5.

Et le middleware pour l'auth est App\Http\Middleware\Authenticate.

Donc, vous pouvez le changer dans la méthode handle du middleware.

4
ultimate

Dans Laravel 5.6, accédez au dossier app/Exceptions et ouvrez le fichier Handler.php, ajoutez une nouvelle méthode qui remplace la méthode non authentifiée, comme suit:

protected function unauthenticated($request, AuthenticationException $exception)
{
    if($request->ajax())
    {
        return response([
            "message" => "Unauthenticated.",
            "data" => [],
        ],401);
    }

    return redirect()->to('/');
}

Cette méthode est déclenchée lorsque vous accédez à un itinéraire protégé à l'aide du middleware intégré "auth". Maintenant, vous aurez le plein contrôle de la redirection ou de la réponse envoyée.

4
Darryldecode

EDIT: Sur Laravel 5.1, ajoutez simplement protected $ redirectPath = '/ url/you/want'; à AuthController ferait l'affaire.

REFER: http://laravel.com/docs/5.1/authentication#included-authenticating


Sur Laravel 5.1, il est complètement déplacé vers un autre middleware nommé RedirectIfAuthenticated.php sous App\Http\Middleware.

public function handle($request, Closure $next)

{
    if ($this->auth->check()) {
        return redirect('/'); //change this part to anywhere you wish to be redirected to
    }

    return $next($request);
}

J'espère que ça aide.

3
marco8757

pourriez-vous s'il vous plaît les sorties php artisan route:list s'il vous plaît

Vous avez raison, vous pouvez définir les attributs suivants:

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

Définissez cet attribut pour vous AuthController.php

0
Nikunj K.

Depuis votre autre question a été marqué comme un doublon .. Je vais essayer d'y répondre ici ..

Vous devez d’abord changer votre itinéraire comme 

<?php
Route::get(config('constants.cms_path') . '/login', [
    'as' => 'login',
    'uses' => 'Auth\AuthController@getLogin'
]);

Dans votre lame, assurez-vous que vous utilisez la route nommée dans le lien URL de connexion, comme 

{{ route('login') }}

Dans Middleware/Authenticate.php, changez l'invité de redirection en

return redirect()->guest(config('constants.cms_path') . '/login');
0
JLPuro

Pour changer la redirection après la connexion, vous devez seulement aller à app/Http/Controllers/Auth/LoginController.php et l'ajouter à la classe LoginController:

protected $redirectTo = '/redirect-url-here';

Idem pour la redirection après l'enregistrement d'un nouvel utilisateur, mais dans ce cas sur AuthController.php

0
asanchez

Pour Laravel 5.4, vous pouvez définir protected $ redirectTo = '/'; dans LoginController.php FILE . Ou dans le fichier RegistersUsers.php, vous pouvez

protected function registered(Request $request, $user)
{
    return redirect('tosomeRoute'); 
    //Note: This code will run when
    //The user has been registered
}
0
Daud khan