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.