Laravel 5.4 禁用注册路由
Laravel 5.4 Disable Register Route
我正在尝试在 Laravel 5.4 中的 运行 应用程序上禁用注册路由。
在我的路由文件中,我只有
Auth::routes();
有什么方法可以禁用注册路由吗?
是的,有办法
Auth::routes();
在您的路线目录中从您的 web.php 中移除该路线。
该路由控制注册。
code
:
Auth::routes();
它是这组路线的捷径:
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
所以您可以用路由列表替换第一个,并在您的应用程序中注释掉您不想要的任何路由。
编辑 laravel version => 5.7
在较新的版本中,您可以将参数添加到 Auth::routes()
函数调用以禁用注册路由:
Auth::routes(['register' => false]);
已添加电子邮件验证路由:
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
顺便说一句,您还可以禁用 Password Reset
和 Email Verification
路由:
Auth::routes(['reset' => false, 'verify' => false]);
你可以试试这个。
Route::match(['get', 'post'], 'register', function(){
return redirect('/');
});
在 Auth::routes()
下方添加这些路由以覆盖默认注册路由。对 /register
路由的任何请求都将重定向到 baseUrl。
我想你想限制来宾访问某些页面,只有管理员可以注册来宾。您可以通过在 kernel.php 文件中添加自己的中间件来实现它,如下所示:
protected $routeMiddleware = [
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
];
创建中间件后,您必须使用它,这样您就可以继续 web.php 路由所在的文件,并将其添加到您想要限制的路由中,如下所示:
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
这种注册方式仅限于来宾,但如果管理员想注册其他管理员,他仍然可以访问该页面!
别忘了用下面的详细列表替换Auth::routes();
:
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
更改路线:
vendor\laravel\framework\src\Illuminate\Routing\Router.php
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
//$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
//$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
//$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
//$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
//$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
//$this->post('password/reset', 'Auth\ResetPasswordController@reset');
}
这看似简单!您只需要覆盖 app/Http/Controllers/Auth/RegisterController.php
Class 中的两个方法。请参阅下文,这将阻止显示表单,最重要的是阻止直接 POST 向您的注册申请请求..
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/
public function showRegistrationForm()
{
return redirect('login');
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
abort(404);
}
虽然上述解决方案有效,但我认为将 App\Http\Controllers\Auth\RegisterController
中的 middleware
更改为 'auth'
将是最简单的解决方案之一。如果他们想要访问任何注册路径,这会将所有访问者重定向到登录页面。像这样:
namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
我猜你可以这样做,在你的 web.php 文件中:
Route::redirect('register', 'login', 301);
自Laravel 5.7以来,Auth::routes()
方法引入了一个新的$options
参数;通过它你可以传递一个数组来控制 required 路由的生成以进行用户身份验证(可以从 'register'
、'reset'
或 'reset'
中选择有效条目'verify'
字符串文字)。
Auth::routes(['register' => false]);
在web.php中,替换
Auth::routes();
有
Auth::routes(['register' => false]);
以便您可以从默认授权路由列表中删除注册路由。我在 5.7 中尝试过,它运行良好。
将这两个方法添加到app\Http\Controllers\Auth\RegisterController。php
public function showRegistrationForm(){
return redirect('login');
}
public function register(){
}
只需覆盖您的 auth showRegistrationForm() 方法(将此代码放入您的 Auth/RegisterController )
public function showRegistrationForm(){
return redirect()->route('login');
}
我只是将我的注册路径重定向到登录路径。在这里您不需要附加或删除任何其他代码
在我的 Laravel 5.6 项目中,此方法无效:
Auth::routes(['register' => false]);
所以我不得不使用以下方法:
Route::match(['get', 'post'], 'register', function () {
return abort(403, 'Forbidden');
})->name('register');
我正在尝试在 Laravel 5.4 中的 运行 应用程序上禁用注册路由。
在我的路由文件中,我只有
Auth::routes();
有什么方法可以禁用注册路由吗?
是的,有办法
Auth::routes();
在您的路线目录中从您的 web.php 中移除该路线。
该路由控制注册。
code
:
Auth::routes();
它是这组路线的捷径:
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
所以您可以用路由列表替换第一个,并在您的应用程序中注释掉您不想要的任何路由。
编辑 laravel version => 5.7
在较新的版本中,您可以将参数添加到 Auth::routes()
函数调用以禁用注册路由:
Auth::routes(['register' => false]);
已添加电子邮件验证路由:
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
顺便说一句,您还可以禁用 Password Reset
和 Email Verification
路由:
Auth::routes(['reset' => false, 'verify' => false]);
你可以试试这个。
Route::match(['get', 'post'], 'register', function(){
return redirect('/');
});
在 Auth::routes()
下方添加这些路由以覆盖默认注册路由。对 /register
路由的任何请求都将重定向到 baseUrl。
我想你想限制来宾访问某些页面,只有管理员可以注册来宾。您可以通过在 kernel.php 文件中添加自己的中间件来实现它,如下所示:
protected $routeMiddleware = [
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
];
创建中间件后,您必须使用它,这样您就可以继续 web.php 路由所在的文件,并将其添加到您想要限制的路由中,如下所示:
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
这种注册方式仅限于来宾,但如果管理员想注册其他管理员,他仍然可以访问该页面!
别忘了用下面的详细列表替换Auth::routes();
:
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
更改路线:
vendor\laravel\framework\src\Illuminate\Routing\Router.php
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
//$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
//$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
//$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
//$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
//$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
//$this->post('password/reset', 'Auth\ResetPasswordController@reset');
}
这看似简单!您只需要覆盖 app/Http/Controllers/Auth/RegisterController.php
Class 中的两个方法。请参阅下文,这将阻止显示表单,最重要的是阻止直接 POST 向您的注册申请请求..
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/
public function showRegistrationForm()
{
return redirect('login');
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
abort(404);
}
虽然上述解决方案有效,但我认为将 App\Http\Controllers\Auth\RegisterController
中的 middleware
更改为 'auth'
将是最简单的解决方案之一。如果他们想要访问任何注册路径,这会将所有访问者重定向到登录页面。像这样:
namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
我猜你可以这样做,在你的 web.php 文件中:
Route::redirect('register', 'login', 301);
自Laravel 5.7以来,Auth::routes()
方法引入了一个新的$options
参数;通过它你可以传递一个数组来控制 required 路由的生成以进行用户身份验证(可以从 'register'
、'reset'
或 'reset'
中选择有效条目'verify'
字符串文字)。
Auth::routes(['register' => false]);
在web.php中,替换
Auth::routes();
有
Auth::routes(['register' => false]);
以便您可以从默认授权路由列表中删除注册路由。我在 5.7 中尝试过,它运行良好。
将这两个方法添加到app\Http\Controllers\Auth\RegisterController。php
public function showRegistrationForm(){
return redirect('login');
}
public function register(){
}
只需覆盖您的 auth showRegistrationForm() 方法(将此代码放入您的 Auth/RegisterController )
public function showRegistrationForm(){
return redirect()->route('login');
}
我只是将我的注册路径重定向到登录路径。在这里您不需要附加或删除任何其他代码
在我的 Laravel 5.6 项目中,此方法无效:
Auth::routes(['register' => false]);
所以我不得不使用以下方法:
Route::match(['get', 'post'], 'register', function () {
return abort(403, 'Forbidden');
})->name('register');