仅在 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 中使用默认身份验证路由对用户进行身份验证后设置会话数据