如何在 Laravel 7 中正确定义我的身份验证路由?
How to properly define my authenticate routes in Laravel 7?
我是 laravel 的新手,我正在尝试定义我的 routes.And 逻辑是“/”路由到“/login”(如果用户未通过身份验证和“/login”路由)登录查看 blade.Down 以下是路线。
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');
但我一直收到此错误 "Route [login] not defined.",但我看不出问题所在。
如果我在全新的 laravel 7 安装中添加 Auth::routes()
,则会在 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
处定义的中间件组。有关中间件组的更多信息,请参阅下文。
如果您想从您的项目中使用 "remove" / - 路由,您可以使用重定向路由。
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 种):
请将以下示例与此 link 进行比较:
https://laravel.com/docs/7.x/middleware#middleware-groups
一般情况下刚开始可能有点难看,controller route和那些使用closure function的没有什么区别。两种实现可以使用的方法相同。只有应用程序中路由的处理会有所不同。
对于需要中间件的单个路由,只需将其添加到末尾即可。
这适用于控制器路由以及关闭路由。
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?
中添加您自己的中间件组。但这将导致非常强大的集成,如果您想偏离轨道,则很难构建异常,因为中间件组中的所有内容一直用于该组应用于的每个路由。
请不要将路由组与中间件组混用,因为它们是不同的东西。
所有这些示例都可以在第 7 版的文档中找到,因此它们应该也适用于您的情况。
我是 laravel 的新手,我正在尝试定义我的 routes.And 逻辑是“/”路由到“/login”(如果用户未通过身份验证和“/login”路由)登录查看 blade.Down 以下是路线。
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');
但我一直收到此错误 "Route [login] not defined.",但我看不出问题所在。
如果我在全新的 laravel 7 安装中添加 Auth::routes()
,则会在 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
处定义的中间件组。有关中间件组的更多信息,请参阅下文。
如果您想从您的项目中使用 "remove" / - 路由,您可以使用重定向路由。
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 种):
请将以下示例与此 link 进行比较:
https://laravel.com/docs/7.x/middleware#middleware-groups
一般情况下刚开始可能有点难看,controller route和那些使用closure function的没有什么区别。两种实现可以使用的方法相同。只有应用程序中路由的处理会有所不同。
对于需要中间件的单个路由,只需将其添加到末尾即可。 这适用于控制器路由以及关闭路由。
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?
中添加您自己的中间件组。但这将导致非常强大的集成,如果您想偏离轨道,则很难构建异常,因为中间件组中的所有内容一直用于该组应用于的每个路由。
请不要将路由组与中间件组混用,因为它们是不同的东西。
所有这些示例都可以在第 7 版的文档中找到,因此它们应该也适用于您的情况。