首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确定义我在Laravel 7的认证路线?

如何正确定义我在Laravel 7的认证路线?
EN

Stack Overflow用户
提问于 2020-04-09 16:52:04
回答 1查看 1.5K关注 0票数 1

我对laravel很陌生,我试图定义我的routes.And --如果用户没有经过身份验证,逻辑是"/“路由到"/login”,而下面的"/login“路由是登录查看blade.Down的路由。

代码语言:javascript
复制
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');

但是我一直收到这个错误“路由登录没有定义”。我看不出有什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 18:33:41

如果我将Auth::routes()添加到一个新鲜的laravel 7中,安装就会在artisan route:list上显示这一点

代码语言:javascript
复制
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| 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    |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+

然后,您应该避免使用不同的实现再次定义相同的路由。让拉勒维尔为你做这件事。

正如您所看到的,已经有一些中间件应用于这些预定义的路由。在这个场景中,web不是中间件本身,而是定义在app/Http/Kernel.php上的中间件组。有关中间件组的更多信息,请参见下面。

如果要从项目中“删除”/ -route,可以使用重定向路由。

https://laravel.com/docs/7.x/routing#redirect-routes

因此,您的路由文件应该是这样的:

代码语言:javascript
复制
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-route的自动化是app/Http/Middleware/RedirectIfAuthenticated.phpapp/Providers/RouteServiceProvider.php之间的一种交互。

在后者中,有一个属性定义了您的HOME

代码语言:javascript
复制
    /**
     * The path to the "home" route for your application.
     *
     * @var string
     */
    public const HOME = '/home';

如果以后有更多应用auth()-middleware的路由,那么有三种方法可以做到这一点(或者可能是4条):

请将以下示例与此链接进行比较:

https://laravel.com/docs/7.x/middleware#middleware-groups

一般情况下,在开始时可能有点难以看出,控制器路由和使用闭包函数的路径没有区别。对于这两种实现,可以使用的方法是相同的。只有应用程序中路由的处理将有所不同。

对于需要中间件的单一路由,只需将其添加到末尾即可。这既适用于控制器路线,也适用于关闭路线。

代码语言:javascript
复制
Route::get('/', function () {
    //
})->middleware('web');
// ^^^^ is as possible as:
Route::get('/', 'Controller@Method')->middleware('web');

对于使用同一中间件的多个路由,请使用中间件方法。可以使用作为数组的一部分分配的多个中间件。

代码语言:javascript
复制
Route::middleware(['web', 'subscribed'])->group(function () {
    //
});

如果您仍然需要更多的定制,直接使用group()-method。在这里,不仅可以定义中间件,还可以为所有封闭式路由定义前缀。

代码语言:javascript
复制
Route::group(['middleware' => ['web'], 'prefix'=>'admin'], function () {
    //
});

作为最后一个选项,您可以将任何您想要的中间件添加到现有的中间件组中,或者在app/Http/Kernel.php?中添加自己的中间件组。但是这将导致相当强的集成,很难构建异常,因为如果您想要偏离轨道,中间件组中的所有内容都会一直用于该组应用到的每一条路由。

请不要将路由组和中间件组混为一谈,因为这些是不同的东西。

所有这些例子都是在第7版的文档中找到的,所以它们也应该适用于您的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61126221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档