Essayer de jouer avec Laravel aujourd'hui pour la première fois. Je reçois le message d'erreur suivant lorsque je tente de visiter localhost/project/public:
InvalidArgumentException
Route [connexion] non définie.
app/routes.php:
<?php
Route::get('/', 'HomeController@redirect');
Route::get('login', 'LoginController@show');
Route::post('login', 'LoginController@do');
Route::get('dashboard', 'DashboardController@show');
app/controllers/HomeController.php:
<?php
class HomeController extends Controller {
public function redirect()
{
if (Auth::check())
return Redirect::route('dashboard');
return Redirect::route('login');
}
}
app/controllers/LoginContoller.php:
<?php
class LoginController extends Controller {
public function show()
{
if (Auth::check())
return Redirect::route('dashboard');
return View::make('login');
}
public function do()
{
// do login
}
}
app/controllers/DashboardController.php:
<?php
class DashboardController extends Controller {
public function show()
{
if (Auth::guest())
return Redirect::route('login');
return View::make('dashboard');
}
}
Pourquoi est-ce que je reçois cette erreur?
Vous essayez de rediriger vers un nom de la route dont le nom est login
, mais vous n'avez aucun itinéraire portant ce nom:
Route::post('login', [ 'as' => 'login', 'uses' => 'LoginController@do']);
La partie 'as'
du deuxième paramètre définit le nom de la route. Le premier paramètre de chaîne définit sa route.
Dans l'application\Exceptions\Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('auth.login'));
}
Laravel a introduit Routes nommées dans Laravel 4.2.
QUOI IS ITINÉRAIRES NOMMÉS?
_ {Les itinéraires nommés vous permettent de donner des noms à votre chemin de routeur. Par conséquent, en utilisant le nom, nous pouvons appeler les itinéraires dans le fichier requis.
COMMENT CRÉER DES ITINÉRAIRES NOMMÉS?
Itinéraires nommés créés de deux manières différentes: as et name ()
METHODE 1:
Route::get('about',array('as'=>'about-as',function()
{
return view('about');
}
));
METHODE 2:
Route::get('about',function()
{
return view('about');
})->name('about-as');
Comment utilisons-nous dans les vues?
<a href="{{ URL::route("about-as") }}">about-as</a>
Par conséquent, laravel 'middleware' => 'auth' a déjà été prédéfini pour être redirigé en tant que page de connexion si l'utilisateur ne s'est pas encore connecté. Par conséquent, nous devrions utiliser le mot clé as.
Route::get('login',array('as'=>'login',function(){
return view('login');
}));
Vous devez ajouter la ligne suivante à votre fichier de routes web.php:
Auth::routes();
Si vous avez des routes d'authentification personnalisées, assurez-vous que vous/route de connexion a 'en tant que' => 'login'
Dans le cas d'une API, ou disons lors de l'implémentation de JWT. Le middleware JWT lève cette exception lorsqu'il ne parvient pas à trouver le jeton et tente de rediriger le journal sur la route en cours . route dans "app\Exceptions\Handler.php"
utilisez Illuminate\Auth\AuthenticationException;
protected function unauthenticated($request, AuthenticationException $exception){
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('ROUTENAME'));
}
Essayez cette méthode:
cherche ce fichier
"RedirectifAuthenticated.php"
mettre à jour ce qui suit comme vous préférez
if (Auth::guard($guard)->check()) {
return redirect('/');
}
$ guard en tant qu'argument prendra le nom du garde personnalisé que vous avez défini, par exemple. "admin" alors ça devrait être comme ça.
if (Auth::guard('admin')->check()) {
return redirect('/admin/dashboard');
}else{
return redirect('/admin/login');
}
J'ai récemment rencontré cette erreur après avoir utilisé le routage d'authentification intégré de Laravel à l'aide de php artisan make:auth
. Lorsque vous exécutez cette commande, ces nouveaux itinéraires sont ajoutés à votre fichier web.php:
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Je dois avoir accidentellement supprimé ces itinéraires. Lancer à nouveau php artisan make:auth
a restauré les itinéraires et résolu le problème. Je cours Laravel 5.5.28.
Remplacer dans vos vues (fichiers de lame) tous
{{ route ('/')}} ----- par ----> {{ url ('/')}}
Si quelqu'un reçoit cela d'un client de repos (ex. Postman) - Vous devez définir l'en-tête sur Accepter application/json.
Pour ce faire sur postman, cliquez sur l'onglet En-têtes, ajoutez une nouvelle clé "Accepter" et tapez la valeur "accepter/json".
Route::post('login', 'LoginController@login')->name('login')
fonctionne très bien et il est propre et explicite
Je suis en retard à la fête. si votre attente est une sorte de JSON renvoyé autrement que d'être redirigé, éditez le gestionnaire d'exceptions alors faites-le.
Allez à App\Exceptions\Handler.php
.__, puis éditez ce code:
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
à
public function render($request, Exception $exception)
{
return response()->json(
[
'errors' => [
'status' => 401,
'message' => 'Unauthenticated',
]
], 401
);
}
essayez d’ajouter à l’en-tête de votre demande: Accepter = application/json postman add header