laravel 5.3 การตรวจสอบสิทธิ์ใหม่ :: เส้นทาง ()


128

เมื่อเร็ว ๆ นี้ฉันเริ่มใช้ laravel 5.3 เพื่อเขียนบล็อก แต่ฉันมีคำถามหลังจากรัน php artisan make:auth

เมื่อฉันเรียกใช้สิ่งนี้มันจะสร้างเส้นทางในไฟล์ web.php

นี่คือรหัสในนั้น:

Auth::routes();

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

จากนั้นฉันก็เรียกใช้php artisan route:listฉันพบการกระทำมากมายเช่น LoginController @ login ...

แต่ฉันไม่พบการกระทำเหล่านี้ในของฉันApp\Http\Controllers\Authสิ่งเหล่านี้อยู่ที่ไหน

และที่Auth::routes()ยืนคืออะไรฉันไม่พบเส้นทางเกี่ยวกับ Auth

ฉันต้องการคนช่วยขอบคุณที่ตอบคำถามของฉัน


11
ฉันเป็นคนเดียวที่เกลียดเวทมนตร์ลาราเวลทั้งหมดนี้หรือไม่?
Muhammad Usman

1
ฉันไม่สนใจเวทมนตร์ laravel ถ้ามีเพียงมันถูกบันทึกไว้ ... และทำงานได้อย่างสม่ำเสมอโดยไม่ต้องเดินไปรอบ ๆ เซิร์ฟเวอร์ในขณะที่สวดมนต์ php artisan .. อะไรนะ?
baradhili

Laravel ทุกอย่างไม่ได้มีไว้สำหรับนักพัฒนาสำหรับ บริษัท และผู้ใช้มือใหม่ที่ต้องการนำแอปใหม่ ๆ มาใช้งานง่ายและรวดเร็วแม้กระทั่งเอกสารของพวกเขา ฉันยังคงชอบ Codeigniter ถ้าฉันมีทางเลือก
BlackPanther

อ่านคู่มือนี้: medium.com/@panjeh/…
panjeh

คำตอบ:


215

Auth::routes()เป็นเพียงคลาสผู้ช่วยที่ช่วยคุณสร้างเส้นทางทั้งหมดที่จำเป็นสำหรับการตรวจสอบผู้ใช้ คุณสามารถเรียกดูโค้ดได้ที่นี่https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.phpแทน

นี่คือเส้นทาง

// 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
ขอบคุณ! ฉันเห็น ../Routing/Router.php และตอนนี้ฉันรู้แล้วว่าเส้นทางทำงานอย่างไร แต่ Auth static method route () อยู่ที่ไหน? ยังหาไม่เจอยกโทษให้ฉันเป็นมือใหม่หัดเล่น ...
g1eny0ung

4
วิธี Auth :: route อยู่ที่นี่github.com/laravel/framework/blob/5.3/src/Illuminate/Support/…และเรียกใช้ฟังก์ชัน Router โปรดทำเครื่องหมายว่านี่เป็นคำตอบหากสิ่งนี้ช่วยคุณได้ขอบคุณ
ลี

2
Authเป็นส่วนหน้าและจะกำหนดไว้ในconfig/app.phpคุณจะพบคลาสที่ทำหน้าที่เป็นผู้ให้บริการในไฟล์กำหนดค่านั้น
Jason

มีเหมือนกัน แต่ได้รับข้อผิดพลาด: NotFoundHttpException in RouteCollection.php line 161:และอีก api ทำงานได้ดี
151291

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');ไม่สามารถเรียกใช้Authapi ได้
151291

52

นี่คือLaravel 5.7 , Laravel 5.8 , Laravel 6.0และLaravel 7.0 (โปรดสังเกตว่ามีการเปลี่ยนแปลง bc เล็กน้อยใน 6.0 สำหรับเส้นทางการยืนยันอีเมล)

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

คุณสามารถตรวจสอบเส้นทางเหล่านี้ได้ที่นี่:


1
มีแน่นอนการเปลี่ยนแปลงเล็ก ๆ จาก 5.8 6.x กับการเชื่อมโยงของคุณจะแสดง: 'email/verify/{id}/{hash}'เส้นทางสำหรับการเชื่อมโยงการตรวจสอบอีเมลที่ควรจะเป็น มิฉะนั้นจะไม่สามารถตรวจสอบแฮชได้และจะมีข้อผิดพลาด 403 ปรากฏขึ้นว่า“ การกระทำนี้ไม่ได้รับอนุญาต”
debite

46

เส้นทางการตรวจสอบสิทธิ์สำหรับ Laravel 5.3 แทน Auth :: route () ฉันหวังว่ามันจะช่วย ...

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

ดังนั้นหากคุณเปลี่ยนชื่อเส้นทางเหล่านี้อย่าลืมเปลี่ยนมุมมองการทำงานของโพสต์ด้วย!


ขอบคุณ แต่คุณไม่จำเป็นต้อง 'มิดเดิลแวร์' => ['เว็บ'] เนื่องจาก: นอกกรอบกลุ่มมิดเดิลแวร์ของเว็บจะถูกนำไปใช้กับไฟล์เส้นทาง / web.php ของคุณโดยอัตโนมัติโดย RouteServiceProvider
panjeh

15

สำหรับ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

คำสั่งเรียกฟังก์ชัน:

  1. (รับรองความถูกต้อง) ส่องสว่าง \ Support \ Facades \ Auth @ เส้นทาง ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (App) Illuminate \ มูลนิธิ \ Application @ รับรองความถูกต้อง
  3. (เส้นทาง) Illuminate \ เส้นทาง \ Router

มันเป็นเส้นทางแบบนี้:

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


คำตอบนี้ให้ความกระจ่างกับคำถามที่ OP ถาม ขอบคุณ @SilentCat
วาเลนไทน์ชิ

ฉันคิดว่ามันจะเป็นการดีที่จะอธิบายด้วยวาจาว่าเกิดอะไรขึ้นใน 3 ขั้นตอนข้างต้น: Auth::routes()- Auth facade - ดึงRouterอินสแตนซ์วัตถุจาก Laravel container และเรียก method ที่มีอยู่authแล้ว ในทางกลับกันการกำหนดเส้นทางและตัวควบคุมของตนที่ถูกสร้างขึ้นโดยauth php artisan make:authนี่ไง.
วาเลนไทน์ชิ

7

นี้ทำงานให้ฉันกับLaravel 5.6

ในไฟล์web.phpให้แทนที่:

Auth::routes();

โดย:

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

และลบลิงค์ลงทะเบียนในสองไฟล์ด้านล่าง:

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

4

หากคุณกำลังค้นหาเส้นทางเดียวกันนี้สำหรับเวอร์ชัน laravel 7 คุณจะพบที่นี่ Vendor/laravel/ui/src/AuthRouteMethods.php


1

ฉันแปลกใจที่ไม่มีใครพูดถึงคำสั่งphp artisan route:listซึ่งจะให้รายการเส้นทางแอปที่ลงทะเบียนทั้งหมด (รวมถึงAuth::routes()และPassport::routes()หากลงทะเบียน)


0

คลาส loginuser ใช้ลักษณะที่เรียกว่า AuthenticatesUsers

หากคุณเปิดลักษณะนั้นคุณจะเห็นฟังก์ชัน (ใช้กับตัวควบคุมอื่น ๆ ) Illuminate\Foundation\Auth\AuthenticatesUsers;

นี่คือรหัสลักษณะhttps://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

ขออภัยสำหรับรูปแบบที่ไม่ดีฉันใช้โทรศัพท์ของฉัน

นอกจากนี้ยังAuth::routes()เรียกใช้ฟังก์ชันที่ส่งคืนเส้นทางการตรวจสอบสิทธิ์นั่นคือ (ฉันคิดว่า)


ใช่ฉันดู Auth / dir แต่ฉันไม่พบวิธีการเช่น App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm ฉันจะหาวิธีหลัง @ ได้ที่ไหนฉันเสียเวลามากในการค้นหา แต่ตอนนี้ ยังหาไม่เจอ.. เพิ่งหัดเล่น ..
g1eny0ung

1
นี่คือเส้นทางแบบเต็มvendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswordsหากคุณต้องการเปลี่ยนสิ่งนี้หรือบางสิ่งอย่าเปลี่ยนสิ่งนี้เพียงเพิ่มวิธีการเดียวกันกับตัวควบคุมของคุณแล้วเปลี่ยน
Achraf Khouadja

@Achraf Khouadja ดูเหมือนว่าคุณจะเชี่ยวชาญเรื่อง Laravel ฉันต้องการให้คุณช่วย ดูที่นี่: stackoverflow.com/questions/41047583/…
moses toh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.