laravel 5.3 новий Auth :: маршрути ()


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.

Мені потрібна хтось допомога, дякую, що відповіли на моє запитання


10
Чи я єдиний, хто зараз ненавидить усі ці магії Ларавеля?
— Мухаммед Усман

1
Я не заперечую за магією laravel, якби вони були задокументовані ... і працювали послідовно без необхідності ходити по віддершинам навколо сервера, скануючи php artisan .. що?
— baradhili

Все, що Laravel не для розробників, це для компаній та початківців користувачів, які хочуть швидко та легко виводити нові програми, навіть їх документацію. Я б все-таки віддав перевагу Codeigniter, якби мав вибір.
— BlackPanther

Прочитайте цей посібник: medium.com/@panjeh/…
— panjeh

Відповіді:


214

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

2
Дякую! Я бачу ../Routing/Router.php і тепер я знаю, як працюють маршрути. Але де маршрути статичного методу Auth ()? Я досі не можу його знайти, пробачте, я початківець laravel ...
— g1eny0ung

4
Метод Auth :: маршрутів є тут github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… і все-таки викликає функцію маршрутизатора. Будь ласка, позначте це як відповідь, якщо це допомогло вам, дякую.
— Лі

2
Authє фасадом і буде визначено у розділі config/app.phpВи знайдете клас, який виступає в якості постачальника у цьому файлі конфігурації.
— Джейсон

Майте те саме, але помилка отримання:, 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 :: routes (). Я сподіваюся, що це допоможе ...

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

Тож якщо ви зміните деякі назви цих маршрутів, не забудьте також змінити в поглядах дії публікацій!


Дякуємо, але вам не потрібно 'middleware' => ['web'] через: поза вікном група веб-програмного забезпечення середнього програмного забезпечення автоматично застосовується до файлів маршрутів / 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. (Auth) Освітлити \ Підтримка \ Фасади \ Auth @ маршрути ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (Додаток) Освітлити \ Фундація \ Приклад @ авт
  3. (Маршрут) Освітлення \ Маршрутизація \ Маршрутизатор

це такий маршрут:

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
— Валентина Ши

Я подумав, що було б добре словесно пояснити, що відбувається на цих 3 етапах вище: Auth::routes()- Фасад Auth - отримує Routerекземпляр об’єкта з контейнера Laravel і називає його попередньо існуючий метод 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


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/AuthenticationUsers.php

Вибачте за поганий формат, я використовую свій телефон

також Auth::routes()він просто викликає функцію, яка повертає auth маршрути thats it (я думаю)


Так, я переглядаю Auth / dir, але я не знаходжу такого методу, як App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm, де я можу знайти метод після @, мені знадобиться багато часу, щоб його знайти, але зараз Я також не можу його знайти. Я новачок у laravel ..
— g1eny0ung

1
ось повний шлях vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, якщо ви хочете змінити це чи щось, не змінюйте це, просто додайте той самий метод до контролера ур, а потім змініть його,
— Ахраф Хауджа,

@Achraf Khouadja, здається, ти майстер laravel. Мені потрібна допомога. Подивіться тут: stackoverflow.com/questions/41047583 / ...
— Moses Toh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.