laravel 5.3 nuevo Auth :: routes ()


128

Recientemente empiezo a usar laravel 5.3 para escribir un blog, pero tengo una pregunta después de ejecutar php artisan make:auth

cuando ejecuto esto, generará rutas en mi web.php

Este es el código que contiene:

Auth::routes();

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

Luego corro php artisan route:list, encuentro muchas acciones, como LoginController @ login ...

Pero no encontré estas acciones en mi App\Http\Controllers\Auth , ¿dónde están?

Y también cuál es el Auth::routes() soporte, no puedo encontrar las rutas sobre Auth.

Necesito ayuda de alguien, gracias por responder mi pregunta.


10
¿Soy el único que ahora odia todas esas magias de Laravel?
— Muhammad Usman

1
No me importan las magias de laravel, si solo estuvieran documentadas ... y funcionaran consistentemente sin tener que caminar por el servidor mientras cantaban php artisan ... ¿qué?
— baradhili

Todo lo que Laravel no es para desarrolladores, es para empresas y usuarios novatos que desean mostrar nuevas aplicaciones de manera rápida y fácil, incluso su documentación. Todavía preferiría Codeigniter si tuviera que elegir.
— BlackPanther

Lea esta guía: medium.com/@panjeh/…
— panjeh

Respuestas:


214

Auth::routes()es solo una clase auxiliar que le ayuda a generar todas las rutas necesarias para la autenticación de usuarios. Puede explorar el código aquí https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php lugar.

Aquí están las rutas.

// 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');

2
¡Gracias! Veo el ../Routing/Router.php y ahora sé cómo funcionan las rutas. Pero, ¿dónde están las rutas del método estático Auth ()? Todavía no puedo encontrarlo, perdóname, soy un principiante laravel ...
— g1eny0ung

44
El método Auth :: routes está aquí github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… y llama a la función Router de todos modos. Marque esto como respuesta si esto le ha ayudado, gracias.
— Lee

2
Authes una fachada y se definirá en config/app.phpEncontrarás la clase que actúa como su proveedor en ese archivo de configuración.
— Jason

Tiene el mismo error pero aparece: NotFoundHttpException in RouteCollection.php line 161:y otra API está funcionando bien.
— 151291

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');no es capaz de ejecutar la AuthAPI
— 151291

51

Aquí están Laravel 5.7 , Laravel 5.8 , Laravel 6.0 y Laravel 7.0 (tenga en cuenta un pequeño cambio de CC en 6.0 a la ruta de verificación de correo electrónico).

// 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');

Puede verificar estas rutas aquí:


1
De hecho, hubo un pequeño cambio de 5.8 a 6.x como muestran sus enlaces: la ruta para el enlace de verificación de correo electrónico debería ser 'email/verify/{id}/{hash}'. De lo contrario, el hash no se puede verificar y se generará un error 403 que dice "Esta acción no está autorizada".
— debite el

46

Rutas de autenticación para Laravel 5.3 en lugar de Auth :: routes (). Espero que ayude...

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']);
});

Entonces, si cambia algunos nombres de estas rutas, recuerde también cambiar en las vistas las acciones de las publicaciones.


Gracias, pero no necesita 'middleware' => ['web'] debido a que: fuera de la caja, el grupo de middleware web se aplica automáticamente a su ruta / web.php archivo por el RouteServiceProvider.
— Panjeh

15

Para 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

orden de llamada de función:

  1. (Auth) Illuminate \ Support \ Facades \ Auth @ routes ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (Aplicación) Illuminate \ Foundation \ Application @ auth
  3. (Ruta) Iluminar \ Enrutamiento \ Enrutador

es una ruta como esta:

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');
}


Esta respuesta realmente arroja luz sobre la pregunta formulada por OP. Gracias @SilentCat.
— Valentine Shi

Pensé que sería bueno explicar verbalmente lo que sucede en estos 3 pasos anteriores: Auth::routes()- la fachada Auth - recupera la Routerinstancia del objeto del contenedor Laravel y llama a su método preexistente auth. autha su vez define las rutas y sus respectivos controladores que fueron generados por php artisan make:auth. Eso es todo.
— Valentine Shi

7

Esto funcionó para mí con Laravel 5.6 .

En el archivo web.php, simplemente reemplace:

Auth::routes();

Por:

//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');

Y elimine el enlace Registrarse en los dos archivos a continuación:

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

4

Si está buscando estas mismas rutas para la versión laravel 7, la encontrará aquí Vendor/laravel/ui/src/AuthRouteMethods.php


1

Me sorprende que nadie haya mencionado el comando php artisan route:list, que proporciona una lista de todas las rutas de aplicaciones registradas (incluidas Auth::routes()y Passport::routes()si están registradas)


0

la clase loginuser usa un rasgo llamado AuthenticatesUsers

si abre ese rasgo, verá las funciones (esto se aplica a otros controladores) Illuminate\Foundation\Auth\AuthenticatesUsers;

aquí está el código de rasgo https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

perdón por el mal formato, estoy usando mi teléfono

También Auth::routes()solo llama a una función que devuelve las rutas de autenticación (eso creo)


Sí, miro a través de Auth / dir, pero no encuentro el método, como App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm, ¿dónde puedo encontrar el método después de @? Me costó mucho tiempo encontrarlo, pero ahora Tampoco puedo encontrarlo ... Soy nuevo en laravel ...
— g1eny0ung

1
aquí está la ruta completa vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, si desea cambiar esto o algo, no cambie esto, simplemente agregue el mismo método a su controlador y luego cámbielo,
— Achraf Khouadja

@Achraf Khouadja, parece que dominas laravel. Necesito tu ayuda. Mire aquí: stackoverflow.com/questions/41047583/…
— moses toh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.