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
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.
Juste pour prolonger @ultime de réponse:
- Vous devez modifier
App\Http\Middleware\Authenticate::handle()méthode et le changerauth/login/login. - Que vous devez ajouter
$loginPathpropriété\App\Http\Controllers\Auth\AuthControllerclasse. 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
}
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');
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.
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.
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.
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');
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
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
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
}