Laravel 5.3 neue Auth :: Routen ()

128

Vor kurzem habe ich angefangen, Laravel 5.3 zu verwenden, um ein Blog zu schreiben, aber ich habe nach dem Ausführen eine Frage php artisan make:auth

Wenn ich dies ausführe, werden Routen in meinem generiert web.php

Dies ist der Code darin:

Auth::routes();

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

Dann laufe ich php artisan route:list, ich finde viele Aktionen, wie LoginController @ login ...

Aber ich habe diese Aktionen nicht in meinem gefunden App\Http\Controllers\Auth, wo sind diese?

Und auch, wofür steht der Auth::routes()Stand, ich kann die Routen über Auth nicht finden.

Ich brauche jemanden, danke, um meine Frage zu beantworten

g1eny0ung
quelle
10
Bin ich der einzige, der jetzt all diese Laravel-Magie hasst?
Muhammad Usman
1
Ich habe nichts gegen die Laravel-Magie, wenn sie nur dokumentiert wäre ... und konsequent funktioniert hätte, ohne Widdershins um den Server laufen zu müssen, während ich PHP-Handwerker singe ... was?
Baradhili
Alles, was Laravel nicht für Entwickler ist, ist für Unternehmen und Anfänger gedacht, die schnell und einfach neue Apps aufrufen möchten, sogar ihre Dokumentation. Ich würde Codeigniter immer noch bevorzugen, wenn ich die Wahl hätte.
BlackPanther
Lesen Sie diese Anleitung: medium.com/@panjeh/…
panjeh

Antworten:

214

Auth::routes()ist nur eine Hilfsklasse, mit der Sie alle für die Benutzerauthentifizierung erforderlichen Routen generieren können. Sie können den Code stattdessen hier https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php durchsuchen .

Hier sind die Routen

// 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');
Lee
quelle
2
Vielen Dank! Ich sehe die ../Routing/Router.php und jetzt weiß ich, wie die Routen funktionieren. Aber wo ist die statische Methode auth der Routen ()? Ich kann es immer noch nicht finden, vergib mir, ich bin ein Laravel-Anfänger ...
g1eny0ung
4
Die Methode Auth :: route ist hier github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… und ruft die Router-Funktion trotzdem auf. Bitte markieren Sie dies als Antwort, wenn dies Ihnen geholfen hat, danke.
Lee
2
Authist eine Fassade und wird in definiert. config/app.phpIn dieser Konfigurationsdatei finden Sie die Klasse, die als Anbieter fungiert.
Jason
Haben Sie das gleiche, aber erhalten Sie Fehler: NotFoundHttpException in RouteCollection.php line 161:und eine andere API läuft gut.
151291
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');nicht in der Lage zu laufen Authapi ist
151.291
51

Hier sind Laravel 5.7 , Laravel 5.8 , Laravel 6.0 und Laravel 7.0 (beachten Sie eine geringfügige Änderung in 6.0 der E-Mail-Überprüfungsroute).

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

Sie können diese Routen hier überprüfen:

Zyglobe
quelle
1
Es gab tatsächlich eine kleine Änderung von 5.8 auf 6.x, wie Ihre Links zeigen: Die Route für den E-Mail-Bestätigungslink sollte sein 'email/verify/{id}/{hash}'. Andernfalls kann der Hash nicht überprüft werden und es wird ein 403-Fehler mit der Meldung "Diese Aktion ist nicht autorisiert" ausgegeben.
Lastschrift
46

Auth-Routen für Laravel 5.3 statt Auth :: route (). Ich hoffe, es hilft...

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

Wenn Sie also einige Namen dieser Routen ändern, denken Sie daran, auch die Aktionen der Beiträge in den Ansichten zu ändern!

Walter Pozzguo
quelle
Vielen Dank, aber Sie müssen nicht 'Middleware' => ['Web'] ausführen, da: Die Web-Middleware-Gruppe wird vom RouteServiceProvider automatisch auf Ihre Datei route / web.php angewendet.
Panjeh
15

Für 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');
Farid Movsumov
quelle
8

Funktionsaufrufreihenfolge:

  1. (Auth) Illuminate \ Support \ Facades \ Auth @ routen ( 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

Es ist eine Route wie diese:

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');
}
SilentCat
quelle
Diese Antwort beleuchtet tatsächlich die von OP gestellte Frage. Danke @SilentCat.
Valentine Shi
Ich dachte, es wäre gut, mündlich zu erklären, was in diesen drei Schritten oben passiert: Auth::routes()- Die Auth-Fassade - Ruft die RouterObjektinstanz aus dem Laravel-Container ab und ruft ihre bereits vorhandene Methode auf auth. authdefiniert wiederum die Routen und ihre jeweiligen Controller, die von generiert wurden php artisan make:auth. Das ist es.
Valentine Shi
7

Dies funktionierte bei mir mit Laravel 5.6 .

web.phpErsetzen Sie in der Datei einfach:

Auth::routes();

Durch:

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

Entfernen Sie den Link Registrieren in den beiden folgenden Dateien:

welcome.blade.php
layouts/app.blade.php
DevonDahon
quelle
4

Wenn Sie dieselben Routen nach der Laravel 7-Version suchen, finden Sie sie hier Vendor/laravel/ui/src/AuthRouteMethods.php

kunal rajput
quelle
1

Ich bin überrascht, dass niemand den Befehl erwähnt hat php artisan route:list, der eine Liste aller registrierten App-Routen enthält (einschließlich Auth::routes()und Passport::routes()falls registriert).

Shay
quelle
0

Die Loginuser-Klasse verwendet ein Merkmal namens AuthenticatesUsers

Wenn Sie dieses Merkmal öffnen, werden die Funktionen angezeigt (dies gilt für andere Controller). Illuminate\Foundation\Auth\AuthenticatesUsers;

Hier ist der Merkmalcode https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

Entschuldigung für das schlechte Format, ich benutze mein Handy

Außerdem Auth::routes()ruft es nur eine Funktion auf, die die Authentifizierungsrouten zurückgibt, die es sind (glaube ich).

Achraf Khouadja
quelle
Ja, ich schaue durch das Auth / dir, aber ich finde die Methode nicht, wie App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm. Wo finde ich die Methode nach @, ich habe viel Zeit gekostet, um sie zu finden, aber jetzt Ich kann es auch nicht finden. Ich bin neu in Laravel.
g1eny0ung
1
Hier ist der vollständige Pfad vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, wenn Sie dies oder etwas ändern möchten, ändern Sie dies nicht, fügen Sie einfach die gleiche Methode zu Ihrem Controller hinzu und ändern Sie sie dann
Achraf Khouadja
@ Achraf Khouadja, Es scheint, Sie beherrschen Laravel. Ich brauche deine Hilfe. Schauen Sie hier: stackoverflow.com/questions/41047583/…
toh