laravel 5.3 новый Auth :: routes ()


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
Я единственный, кто теперь ненавидит всю эту магию Laravel?
Мухаммад Усман

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 routes ()? Я до сих пор не могу его найти, прости, я новичок в laravel ...
g1eny0ung

4
Метод Auth :: routes находится здесь github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… и в любом случае вызывает функцию Router. Пожалуйста, отметьте это как ответ, если это вам помогло, спасибо.
Ли

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 с надписью «Это действие неавторизовано».
дебит

46

Auth routes для 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'], потому что: изначально группа промежуточного программного обеспечения веб автоматически применяется к вашему файлу routes / 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) Illuminate \ Support \ Facades \ Auth @ routes ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (App) Осветите \ Foundation \ Application @ аутентификации
  3. (Маршрут) Осветите \ Routing \ 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.
Валентин Ши

Я подумал, что было бы неплохо устно объяснить, что происходит в этих трех шагах выше: 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/AuthenticatesUsers.php

извините за плохой формат, я использую свой телефон

также Auth::routes()он просто вызывает функцию, которая возвращает маршруты аутентификации, которые это (я думаю)


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

1
вот полный путь vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, если вы хотите изменить это или что-то еще, не меняйте это, просто добавьте тот же метод в контроллер ur, а затем измените его,
Ахраф Хоуаджа

@Achraf Khouadja, похоже, вы мастер ларавел. Мне нужна твоя помощь. Посмотрите здесь: stackoverflow.com/questions/41047583/…
Моисей до
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.