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
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.
Juste pour prolonger la réponse de @ ultime:
App\Http\Middleware\Authenticate::handle()
et remplacer auth/login
par /login
.$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
}
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');
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.
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.
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.
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
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');
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
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
}