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.