Comment changer L'URL de redirection par défaut de Laravel 5 Auth filter?

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

http://localhost:8000/home

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

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

18
demandé sur Jeff Puckett 2015-02-24 20:29:09

10 réponses

je voulais faire la même chose à Laravel 5.5. La gestion de l'authentification s'est déplacée vers Illuminate\Auth\Middleware\Authenticate qui lance un Illuminate\Auth\AuthenticationException.

cette exception est traitée dans Illuminate\Foundation\Exceptions\Hander.php, mais vous ne voulez pas changer les fichiers fournisseurs d'origine, donc vous pouvez l'écraser avec vos propres fichiers de projet en l'ajoutant à App\Exceptions\Handler.php.

pour ce faire, ajoutez ce qui suit au haut de la Handler classe App\Exceptions\Handler.php:

use Illuminate\Auth\AuthenticationException;

et ensuite ajouter la méthode suivante, éditant comme 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');return redirect()->guest(route('auth.login')); ou n'importe quoi d'autre.

je voulais écrire cela, car il m'a fallu plus de 5 minutes pour le comprendre. S'il vous plaît envoyez-moi une ligne, si vous arrivé à trouver dans la doc parce que je ne pouvais pas.

36
répondu Moritz Ewert 2018-01-29 12:33:14

Juste pour prolonger @ultime de réponse:

  1. Vous devez modifier App\Http\Middleware\Authenticate::handle() méthode et le changer auth/login/login.
  2. Que vous devez ajouter $loginPath propriété \App\Http\Controllers\Auth\AuthController classe. Pourquoi? Voir Laravel source.

En conséquence, vous aurez 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 Controller AuthController:

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

    // ... other properties, constructor, traits, etc 
}
29
répondu e1v 2015-03-02 09:29:00

C'est Laravel 5.4 Solution:

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

alors changez

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

return redirect()->guest('auth/login');
10
répondu Salil Kothadia 2017-02-21 15:58:07

les contrôles D'authentification sont effectués à L'aide d'middleware dans Laravel 5.

Et le middleware pour auth App\Http\Middleware\Authenticate.

Donc, vous pouvez le changer en handle méthode de l'intergiciel.

4
répondu ultimate 2015-02-24 18:03:26

dans Laravel 5.6, allez dans le dossier app/Exceptions et ouvrez le Gestionnaire.php, ajouter une nouvelle méthode qui l'emporte sur le non authentifié méthode comme ceci:

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 à une route protégée en utilisant l'middleware "auth" intégré. Maintenant vous aurez le contrôle total où rediriger ou la réponse envoyée.

4
répondu Darryldecode 2018-03-11 08:13:31

EDIT: Sur Laravel 5.1, il suffit d'ajouter protected $redirectPath = '/url/vous/voulez-vous'; action authcontroller ferait l'affaire.

VOIR : 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 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
répondu marco8757 2015-07-11 17:05:49

Depuis vos autres question a été marqué comme en double..Je vais essayer d'y répondre ici..

vous devez d'Abord modifier votre itinéraire comme

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

Dans votre lame..assurez-vous d'utiliser named route dans le lien de L'url de connexion comme

{{ route('login') }}

Dans Middleware / Authenticate.php modifier la redirection d'hôtes à

return redirect()->guest(config('constants.cms_path') . '/login');
0
répondu JLPuro 2017-05-23 11:55:10

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

Vous êtes de droite, vous pouvez définir les attributs suivants:

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

Définissez cet attribut à vous AuthController.php

0
répondu Nikunj K. 2016-04-27 11:45:48

pour changer la redirection après la connexion, vous n'avez qu'à aller sur app/Http/Controllers/Auth/LoginController.php et d'ajouter qu'à l'intérieur de la classe LoginController:

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

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

0
répondu antsanchez 2017-04-23 07:02:03

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

protected function registered(Request $request, $user)
{
    return redirect('tosomeRoute'); 
    //Note: This code will run when
    //The user has been registered
}
0
répondu Daud khan 2017-05-14 07:44:01