Laravel 5.4禁用注册路由

时间:2017-03-09 12:52:39

标签: php laravel laravel-5.4

我正在尝试禁用在Laravel 5.4中运行的应用程序上的注册路由。

在我的路线文件中,我只有

Auth::routes();

有没有办法禁用寄存器路由?

13 个答案:

答案 0 :(得分:62)

代码:

 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');

因此,您可以将第一个替换为路线列表,并在您的申请中注明您不想要的任何路线。

答案 1 :(得分:26)

从Laravel 5.0开始,您可以通过选项进行传递和排列

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

您可以查看代码Illuminate \ Routing \ Router @ auth

答案 2 :(得分:19)

你可以试试这个。

Route::match(['get', 'post'], 'register', function(){
    return redirect('/');
});

Auth::routes()下方添加这些路由以覆盖默认注册路由。对/register路由的任何请求都将重定向到baseUrl。

答案 3 :(得分:7)

这看起来很容易!您只需要覆盖app/Http/Controllers/Auth/RegisterController.php类中的两个方法。请参阅下文,这将阻止表单显示,最重要的是阻止直接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);
}

答案 4 :(得分:4)

在web.php中,替换

Auth::routes();

使用

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

以便您可以从默认身份验证路由列表中删除注册路由。我在5.7中尝试过,效果很好。

答案 5 :(得分:3)

虽然上述解决方案有效,但我认为将middleware中的'auth'更改为App\Http\Controllers\Auth\RegisterController将是最简单的解决方案之一。如果要访问任何注册路由,这会将所有访问者重定向到登录页面。像这样:

namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

答案 6 :(得分:2)

我想您可以在web.php文件中这样做:

Route::redirect('register', 'login', 301);

答案 7 :(得分:1)

我想您要限制访客访问某些页面,只有管理员可以注册访客。您可以通过在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');

答案 8 :(得分:0)

将这两个方法添加到app \ Http \ Controllers \ Auth \ RegisterController.php

public function showRegistrationForm(){
    return redirect('login');
}

public function register(){

}

答案 9 :(得分:0)

只需覆盖您的auth showRegistrationForm()方法(将此代码放入您的 Auth / RegisterController

public function showRegistrationForm() { return redirect()->route('login'); }

我只是将注册路线重定向到登录路线。在这里,您无需添加或删除任何其他代码

答案 10 :(得分:0)

在我的Laravel 5.6 项目中,此方法无效:

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

所以我不得不使用以下方法:

Route::match(['get', 'post'], 'register', function () { return abort(403, 'Forbidden'); })->name('register');

答案 11 :(得分:-4)

是的,有办法

Auth::routes();

远离您路径目录中web.php的路由。

该路线控制着注册。

答案 12 :(得分:-4)

更改路线:

  

供应商\ laravel \框架\ SRC \照亮\路由\ 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');
}
相关问题