laravel 5.3 nuovo Auth :: rotte ()


128

Recentemente ho iniziato a usare laravel 5.3 per scrivere un blog, ma ho una domanda dopo l'esecuzione php artisan make:auth

quando lo eseguo, genererà percorsi nel mio file web.php

questo è il codice in esso:

Auth::routes();

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

Poi corro php artisan route:list , trovo molte azioni, come LoginController @ login ...

Ma non ho trovato queste azioni nel mio file App\Http\Controllers\Auth , dove sono queste?

E anche qual è il file Auth::routes() stand, non riesco a trovare i percorsi su Auth.

Ho bisogno dell'aiuto di qualcuno, grazie per rispondere alla mia domanda


11
Sono l'unico che ora odia tutte quelle magie di Laravel?
Muhammad Usman

1
Non mi dispiace le magie di Laravel, se solo fossero documentate ... e funzionassero in modo coerente senza dover camminare per il server mentre cantavo php artisan..cosa?
baradhili

Tutto ciò che Laravel non è per gli sviluppatori, è per le aziende e gli utenti inesperti che vogliono far apparire nuove app in modo facile e veloce, anche la loro documentazione. Preferirei ancora Codeigniter se potessi scegliere.
BlackPanther

Leggi questa guida: medium.com/@panjeh/…
panjeh

Risposte:


215

Auth::routes()è solo una classe helper che ti aiuta a generare tutte le rotte richieste per l'autenticazione dell'utente. Puoi invece sfogliare il codice qui https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php .

Ecco i percorsi

// 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
Grazie! Vedo ../Routing/Router.php e ora so come funzionano le rotte. Ma dov'è il metodo statico Auth di rotte ()? Non riesco ancora a trovarlo, perdonami, sono un principiante di Laravel ...
g1eny0ung

4
Il metodo Auth :: routes è qui github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… e chiama comunque la funzione Router. Si prega di contrassegnarlo come risposta se questo ti ha aiutato, grazie.
Lee

2
Authè una facciata e sarà definita in. config/app.phpTroverai la classe che funge da provider in quel file di configurazione.
Jason

Avere lo stesso ma ottenere l'errore: NotFoundHttpException in RouteCollection.php line 161:e un'altra API funziona correttamente .
151291

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');non in grado di eseguire AuthAPI
151291

52

Ecco Laravel 5.7 , Laravel 5.8 , Laravel 6.0 e Laravel 7.0 (nota una piccola modifica bc in 6.0 al percorso di verifica dell'email).

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

Puoi verificare questi percorsi qui:


1
C'è stato effettivamente un piccolo cambiamento da 5.8 a 6.x come mostrano i tuoi link: Il percorso per il link di verifica email dovrebbe essere 'email/verify/{id}/{hash}'. In caso contrario, l'hash non può essere verificato e verrà generato un errore 403 che dice "Questa azione non è autorizzata".
debite il

46

Le rotte di autenticazione per Laravel 5.3 invece di Auth :: rotte (). Spero possa essere d'aiuto...

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

Quindi se modifichi alcuni nomi di queste rotte, ricordati di cambiare anche nelle visualizzazioni le azioni dei post!


Grazie ma non hai bisogno di 'middleware' => ['web'] a causa di: fuori dalla scatola, il gruppo middleware web viene automaticamente applicato al tuo file route / web.php dal RouteServiceProvider.
panjeh

15

Per 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

ordine di chiamata di funzione:

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

è un percorso in questo modo:

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


Questa risposta in realtà fa luce sulla domanda posta da OP. Grazie @SilentCat.
Valentine Shi

Ho pensato che sarebbe stato utile spiegare verbalmente cosa succede in questi 3 passaggi precedenti: Auth::routes()- la facciata Auth - recupera l' Routeristanza dell'oggetto dal contenitore Laravel e chiama il suo metodo preesistente auth. autha sua volta definisce le rotte ei rispettivi controller che sono stati generati da php artisan make:auth. Questo è.
Valentine Shi

7

Questo ha funzionato per me con Laravel 5.6 .

Nel file web.php, basta sostituire:

Auth::routes();

Di:

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

E rimuovere il collegamento Registrati nei due file seguenti:

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

4

Se stai cercando questi stessi percorsi per la versione di laravel 7, lo troverai qui Vendor/laravel/ui/src/AuthRouteMethods.php


1

Sono sorpreso che nessuno abbia menzionato il comando php artisan route:list, che fornisce un elenco di tutti i percorsi delle app registrati (inclusi Auth::routes()e Passport::routes()se registrati)


0

la classe loginuser utilizza un tratto chiamato AuthenticatesUsers

se apri quel tratto vedrai le funzioni (questo vale per altri controller) Illuminate\Foundation\Auth\AuthenticatesUsers;

ecco il codice del tratto https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

scusa per il cattivo formato, sto usando il mio telefono

inoltre Auth::routes()chiama solo una funzione che restituisce le route di autenticazione (penso)


Sì, cerco in Auth / dir, ma non trovo il metodo, come App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm, dove posso trovare il metodo dopo @, mi costa molto tempo per trovarlo, ma ora Inoltre non riesco a trovarlo .. Sono nuovo di laravel ..
g1eny0ung

1
ecco il percorso completo vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords , se vuoi cambiare questo o qualcosa del genere, non cambiare questo, aggiungi solo lo stesso metodo al tuo controller e poi
cambialo

@ Achraf Khouadja, sembra che tu sia il maestro di Laravel. Ho bisogno del tuo aiuto. Guarda qui: stackoverflow.com/questions/41047583/…
Mosè al
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.