laravel 5.3 nouvelle Auth :: routes ()


128

Récemment, j'ai commencé à utiliser laravel 5.3 pour écrire un blog, mais j'ai une question après l'exécution php artisan make:auth

quand je l'exécute, il générera des routes dans mon web.php

c'est le code qu'il contient:

Auth::routes();

Route::get('/home', 'HomeController@index');

Ensuite je cours php artisan route:list, je trouve plein d'actions, comme LoginController @ login ...

Mais je n'ai pas trouvé ces actions dans mon App\Http\Controllers\Auth, où sont-elles?

Et aussi à quoi sert le Auth::routes()stand, je ne trouve pas les itinéraires sur Auth.

J'ai besoin de l'aide de quelqu'un, merci de répondre à ma question


11
Suis-je le seul à détester maintenant toutes ces magies de Laravel?
Muhammad Usman

1
Cela ne me dérange pas les magies de laravel, si seulement elles étaient documentées ... et fonctionnaient de manière cohérente sans avoir à marcher autour du serveur tout en chantant php artisan ... quoi?
baradhili

Tout ce que Laravel n'est pas pour les développeurs, c'est pour les entreprises et les utilisateurs novices qui souhaitent mettre en place de nouvelles applications rapidement et facilement, même leur documentation. Je préférerais toujours Codeigniter si j'avais le choix.
BlackPanther

Lisez ce guide: medium.com/@panjeh/…
panjeh

Réponses:


215

Auth::routes()est juste une classe d'assistance qui vous aide à générer toutes les routes requises pour l'authentification des utilisateurs. Vous pouvez parcourir le code ici https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php à la place.

Voici les itinéraires

// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

3
Merci! Je vois le ../Routing/Router.php et maintenant je sais comment fonctionnent les routes. Mais où est la méthode statique Auth routes ()? Je ne peux toujours pas le trouver, pardonne-moi, je suis un débutant de laravel ...
g1eny0ung

4
La méthode Auth :: routes est ici github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… et elle appelle quand même la fonction Router. Veuillez marquer ceci comme réponse si cela vous a aidé, merci.
Lee

2
Authest une façade et sera définie dans config/app.phpVous trouverez la classe qui agit comme son fournisseur dans ce fichier de configuration.
Jason

Avoir la même chose mais obtenir une erreur NotFoundHttpException in RouteCollection.php line 161::, et une autre API fonctionne bien.
151291

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');impossible d'exécuter les AuthAPI
151291

52

Voici Laravel 5.7 , Laravel 5.8 , Laravel 6.0 et Laravel 7.0 (notez un changement mineur en bc dans la version 6.0 de la route de vérification des e-mails).

// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');

// Confirm Password (added in v6.2)
Route::get('password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm');
Route::post('password/confirm', 'Auth\ConfirmPasswordController@confirm');

// Email Verification Routes...
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify'); // v6.x
/* Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify'); // v5.x */
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

Vous pouvez vérifier ces itinéraires ici:


1
Il y a eu en effet un petit changement de 5.8 à 6.x comme le montrent vos liens: l'itinéraire pour le lien de vérification de l'e-mail devrait être 'email/verify/{id}/{hash}'. Sinon, le hachage ne peut pas être vérifié et une erreur 403 sera lancée disant "Cette action n'est pas autorisée".
débite le

46

Auth routes pour Laravel 5.3 à la place Auth :: routes (). J'espère que ça aide ...

Route::group(['middleware' => ['web']], function() {

// Login Routes...
    Route::get('login', ['as' => 'login', 'uses' => 'Auth\LoginController@showLoginForm']);
    Route::post('login', ['as' => 'login.post', 'uses' => 'Auth\LoginController@login']);
    Route::post('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// Registration Routes...
    Route::get('register', ['as' => 'register', 'uses' => 'Auth\RegisterController@showRegistrationForm']);
    Route::post('register', ['as' => 'register.post', 'uses' => 'Auth\RegisterController@register']);

// Password Reset Routes...
    Route::get('password/reset', ['as' => 'password.reset', 'uses' => 'Auth\ForgotPasswordController@showLinkRequestForm']);
    Route::post('password/email', ['as' => 'password.email', 'uses' => 'Auth\ForgotPasswordController@sendResetLinkEmail']);
    Route::get('password/reset/{token}', ['as' => 'password.reset.token', 'uses' => 'Auth\ResetPasswordController@showResetForm']);
    Route::post('password/reset', ['as' => 'password.reset.post', 'uses' => 'Auth\ResetPasswordController@reset']);
});

Donc si vous changez certains noms de ces routes, pensez à changer également dans les vues les actions des posts!


Merci mais vous n'avez pas besoin de 'middleware' => ['web'] car: prêt à l'emploi, le groupe de middleware Web est automatiquement appliqué à votre fichier routes / web.php par le RouteServiceProvider.
panjeh

15

Pour Laravel 5.5.x

// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

8

ordre d'appel des fonctions:

  1. (Auth) Illuminate \ Support \ Facades \ Auth @ routes ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (App) Illuminate \ Foundation \ Application @ auth
  3. (Route) Illuminate \ Routing \ Router

c'est un itinéraire comme celui-ci:

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\AuthController@showLoginForm');
    $this->post('login', 'Auth\AuthController@login');
    $this->get('logout', 'Auth\AuthController@logout');
    // Registration Routes...
    $this->get('register', 'Auth\AuthController@showRegistrationForm');
    $this->post('register', 'Auth\AuthController@register');
    // Password Reset Routes...
    $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
    $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
    $this->post('password/reset', 'Auth\PasswordController@reset');
}


Cette réponse éclaire en fait la question posée par OP. Merci @SilentCat.
Valentine Shi

J'ai pensé qu'il serait bon d'expliquer verbalement ce qui se passe dans ces 3 étapes ci-dessus: Auth::routes()- la façade Auth - récupère l' Routerinstance d'objet du conteneur Laravel et appelle sa méthode préexistante auth. authdéfinit à son tour les routes et leurs contrôleurs respectifs générés par php artisan make:auth. Ça y est.
Valentine Shi

7

Cela a fonctionné pour moi avec Laravel 5.6 .

Dans le fichier web.php, remplacez simplement:

Auth::routes();

Par:

//Auth::routes();
// Authentication Routes...
Route::get('admin/login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('admin/login', 'Auth\LoginController@login');
Route::post('admin/logout', 'Auth\LoginController@logout')->name('logout');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

Et supprimez le lien S'inscrire dans les deux fichiers ci-dessous:

welcome.blade.php
layouts/app.blade.php

4

Si vous recherchez ces mêmes itinéraires pour la version laravel 7, vous le trouverez ici Vendor/laravel/ui/src/AuthRouteMethods.php


1

Je suis surpris que personne n'ait mentionné la commande php artisan route:list, qui donne une liste de toutes les routes d'application enregistrées (y compris Auth::routes()et Passport::routes()si elles sont enregistrées)


0

la classe loginuser utilise un trait appelé AuthenticatesUsers

si vous ouvrez ce trait, vous verrez les fonctions (cela s'applique aux autres contrôleurs) Illuminate\Foundation\Auth\AuthenticatesUsers;

voici le code de trait https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

désolé pour le mauvais format, j'utilise mon téléphone

aussi Auth::routes()il appelle juste une fonction qui renvoie les routes d'authentification c'est tout (je pense)


Oui, je regarde dans Auth / dir, mais je ne trouve pas la méthode, comme App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm, où puis-je trouver la méthode après @, j'ai mis beaucoup de temps à la trouver, mais maintenant Je ne peux pas non plus le trouver .. Je suis nouveau sur laravel ..
g1eny0ung

1
voici le chemin complet vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, si vous voulez changer ceci ou quelque chose, ne changez pas cela, ajoutez simplement la même méthode à votre contrôleur, puis changez-le,
Achraf Khouadja

@Achraf Khouadja, il semble que vous maîtrisez Laravel. J'ai besoin de ton aide. Regardez ici: stackoverflow.com/questions/41047583/…
moses toh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.