仅在 Laravel 中公开某些身份验证路由

Posted

技术标签:

【中文标题】仅在 Laravel 中公开某些身份验证路由【英文标题】:Only exposing certain auth routes in Laravel 【发布时间】:2016-11-13 08:42:28 【问题描述】:

在 Laravel 5.2 中,身份验证变得非常简单,它使身份验证更简单的方法之一是通过一种方法添加身份验证所需的所有路由,该方法是 Route::auth()

这很好,但最好的方法是只公开登录和注销操作所需的操作而不是注册操作,因为我想要一个主登录,它可以让其他帐户来管理网站。但我不想要正常意义上的“用户”。

【问题讨论】:

【参考方案1】:

方法一。

web.php 文件中添加路由。 例如,当您的应用只需要登录和注销路由时

Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');

方法 2 - 有更好的方法。 只需使用Auth::routes() 方法并添加其他参数即可。 同样的例子 - 应用只需要登录和注销路由

Auth::routes(['register' => false, 'reset' => false])

【讨论】:

【参考方案2】:

当然不用注册路由也可以添加到routes.php中。

// Authentication Routes...
//Login Routes...
Route::get('login','AdminAuth\AuthController@showLoginForm');
Route::post('login','AdminAuth\AuthController@login');
Route::get('logout','AdminAuth\AuthController@logout');


// Registration Routes...
Route::get('register', 'Auth\AuthController@showRegistrationForm');


// Password Reset Routes...
Route::get('password/reset/token?','Auth\PasswordController@showResetForm');

【讨论】:

【参考方案3】:

如果您在routes.php 中运行Route::auth() 方法并运行php artisan route:list 命令,您可以看到它定义了哪些路由。

在这种情况下,它们是:

+--------+----------+-------------------------+------+----------------------     -------------------------------------------+------------+
| Domain | Method   | URI                     | Name | Action                                                           | Middleware |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+------------+
|        | GET|HEAD | /                       |      | Closure                                                         | web        |
|        | GET|HEAD | home                    |      | App\Http\Controllers\HomeController@index                       | web,auth   |
|        | GET|HEAD | login                   |      | App\Http\Controllers\Auth\AuthController@showLoginForm          | web,guest  |
|        | POST     | login                   |      | App\Http\Controllers\Auth\AuthController@login                  | web,guest  |
|        | GET|HEAD | logout                  |      | App\Http\Controllers\Auth\AuthController@logout                 | web        |
|        | POST     | password/email          |      | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | web,guest  |
|        | POST     | password/reset          |      | App\Http\Controllers\Auth\PasswordController@reset              | web,guest  |
|        | GET|HEAD | password/reset/token? |      | App\Http\Controllers\Auth\PasswordController@showResetForm      | web,guest  |
|        | GET|HEAD | register                |      | App\Http\Controllers\Auth\AuthController@showRegistrationForm   | web,guest  |
|        | POST     | register                |      | App\Http\Controllers\Auth\AuthController@register               | web,guest  |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+------------+

在 URI 列中可以清楚地看到哪些是必需的; login(获取)、login(发布)和logout(获取)。

routes.php 中删除Route::auth() 方法并添加以下内容:

Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');

如果您确实希望已经注册的管理员能够手动更改他们的密码,您还可以包括:

Route::post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
Route::post('password/reset', 'Auth\PasswordController@reset');
Route::get('password/reset/token?', 'Auth\PasswordController@showResetForm');

别忘了给你的工具:)

【讨论】:

以上是关于仅在 Laravel 中公开某些身份验证路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 身份验证。限制对资源的某些功能的访问,但不是全部

身份验证问题 Laravel 5.2 登录仅在本地工作

仅允许经过身份验证的用户访问 API 路由

在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据

Laravel 默认使用 Vuejs 进行身份验证,仅在登录后提供 spa

如何允许任何用户使用 Laravel JWT 身份验证访问路由?