Как правильно определить мои маршруты аутентификации в Laravel 7? - PullRequest
0 голосов
/ 09 апреля 2020

Я новичок в laravel и пытаюсь определить свои маршруты. И логи c - это "/" маршрутизация к "/ login", если пользователь не аутентифицирован, и "/ login" маршрутизация к представлению входа в систему Ниже приведены маршруты.

Auth::routes();

Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
});

Route::get('login', function (){

    return view('auth/login');

});

Route::get('register', function (){

    if(Auth::check()){

        return view('home');

    }else{

        return view('auth/register');
    }

});

Route::get('/', function () {

    if(Auth::check()){

        return view('home');

    }else{

        return redirect('/login');

    }
});




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

Но я продолжаю получать эту ошибку "Маршрут [логин] не определен". и я не вижу проблемы.

1 Ответ

2 голосов
/ 09 апреля 2020

Если я добавлю Auth::routes() в установку fre sh laravel 7, это отобразится на artisan route:list:

+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method   | URI                    | Name             | Action                                                                 | Middleware   |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD | /                      |                  | Closure                                                                | web          |
|        | GET|HEAD | api/user               |                  | Closure                                                                | api,auth:api |
|        | GET|HEAD | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
|        | POST     | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
|        | POST     | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
|        | GET|HEAD | password/confirm       | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm    | web,auth     |
|        | POST     | password/confirm       |                  | App\Http\Controllers\Auth\ConfirmPasswordController@confirm            | web,auth     |
|        | POST     | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web          |
|        | GET|HEAD | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web          |
|        | POST     | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web          |
|        | GET|HEAD | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web          |
|        | GET|HEAD | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
|        | POST     | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+

Затем следует избегать определения тех же маршрутов снова с другой реализацией. Пусть Laravel сделает всю работу за вас.
Как вы можете видеть, уже есть промежуточные программы, примененные к этим предопределенным маршрутам. web в этом сценарии - не само промежуточное ПО, а группа промежуточного ПО, определенная как app/Http/Kernel.php. Ниже приведена более подробная информация о группах промежуточного программного обеспечения.

Если вы хотите «удалить» / -route из своего проекта, вы можете использовать маршрут перенаправления.
https://laravel.com/docs/7.x/routing#redirect -routes

Таким образом, ваш файл маршрута должен, в конце концов, выглядеть следующим образом:

Auth::routes();

Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
});

// this will let laravel automatically redirect again if already logged in
Route::permanentRedirect('/', '/login');

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

Автоматизация, которая перенаправит вас к /home -руту, является взаимодействием между app/Http/Middleware/RedirectIfAuthenticated.php и app/Providers/RouteServiceProvider.php.

В последнем у вас есть атрибут, определяющий ваш HOME

    /**
     * The path to the "home" route for your application.
     *
     * @var string
     */
    public const HOME = '/home';

Если у вас есть более поздние маршруты, к которым следует применять auth() -программу Есть три способа сделать это (или, вероятно, 4):

Пожалуйста, сравните следующие примеры с этой ссылкой:
https://laravel.com/docs/7.x/middleware#middleware -групп

В целом Вначале это может быть немного трудно увидеть, нет никакой разницы между маршрутом контроллера и тем, который использует функцию закрытия. Методы, которые можно использовать, одинаковы для обеих реализаций. Только обработка маршрута в приложении будет другой.

Для одного маршрута, для которого требуется промежуточное программное обеспечение, просто добавьте его в конец. Это применимо как к маршрутам контроллера, так и к маршрутам закрытия.

Route::get('/', function () {
    //
})->middleware('web');
// ^^^^ is as possible as:
Route::get('/', 'Controller@Method')->middleware('web');

Для нескольких маршрутов, использующих одно и то же промежуточное ПО, используйте метод промежуточного ПО. Можно использовать несколько промежуточных программ, назначенных как части массива.

Route::middleware(['web', 'subscribed'])->group(function () {
    //
});

Если вам все еще нужно больше настроек, используйте метод group() напрямую. Здесь вы можете определить не только промежуточное программное обеспечение, но также, например, префикс для всех вложенных маршрутов

Route::group(['middleware' => ['web'], 'prefix'=>'admin'], function () {
    //
});

В качестве последнего варианта вы можете добавить любое промежуточное программное обеспечение в существующую группу промежуточного программного обеспечения или добавить собственную группу промежуточного программного обеспечения. в пределах app/Http/Kernel.php?. Но это вызовет довольно сильную интеграцию, которая создаст исключение, если вы захотите отключить go, потому что все в группе промежуточного программного обеспечения используется постоянно для каждого маршрута, к которому применяется эта группа.

Пожалуйста, не смешивайте группы маршрутов с группами промежуточного программного обеспечения, поскольку это разные вещи.

Все эти примеры были найдены в документации для 7-й версии, поэтому они должны быть применимы и для вашего случая ,

...