从Laravel身份验证中排除路由

时间:2016-02-01 13:52:08

标签: php laravel laravel-5.2

运行php artisan make:auth后,所有必需的路由都在route.php文件中,但是是否可以删除一个(我想删除注册路由)?

目前我有

Route::group(['middleware' => 'web'], function () {
    Route::auth();
});

我知道Route::auth()是添加所有路线的快捷方式。 我应该自己指定路线而不是使用快捷方式吗?

5 个答案:

答案 0 :(得分:8)

很遗憾,您无法使用Route::auth()的当前实施方式排除注册。

您必须手动指定所有路线,以便

// Authentication Routes...
$this->get('login', 'Auth\AuthController@showLoginForm');
$this->post('login', 'Auth\AuthController@login');
$this->get('logout', 'Auth\AuthController@logout');

// Password Reset Routes...
$this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
$this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
$this->post('password/reset', 'Auth\PasswordController@reset');

我认为这是一个相当普遍的事情,想要这样做会很好,如果有auth方法的参数说没有寄存器也许你可以向项目提交拉动请求。

答案 1 :(得分:3)

我只是YOLO并在RegisterController.php中更改它

public function __construct()
{
    $this->middleware('guest');
}

到这个

public function __construct()
{
    $this->middleware('auth');
}

这使得注册页面要求您进入它。

这是一个黑客攻击。但这是一个很好的黑客。

编辑: 只需将其添加到播种机中,即可让生活更轻松:

    $u1= new App\User;
    $u1->name = 'Your name';
    $u1->email = 'your@mail.com';
    $u1->password = bcrypt('yourPassword');
    $u1->save();

答案 2 :(得分:1)

正如马克戴维森所说,开箱即用是不可能的。但这就是我的处理方式。

现在它可能有点矫枉过正,但我​​传递了一系列需要的内容。如果未传递任何参数,则会创建默认路由。

// Include the authentication and password routes
Route::auth(['authentication', 'password']);
/**
 * Register the typical authentication routes for an application.
 *
 * @param array $options
 * @return void
 */
public function auth(array $options = [])
{
    if ($options) {
        // Authentication Routes...
        if (in_array('authentication', $options)) {
            $this->get('login', 'Auth\AuthController@showLoginForm');
            $this->post('login', 'Auth\AuthController@login');
            $this->get('logout', 'Auth\AuthController@logout');
        }

        // Registration Routes...
        if (in_array('registration', $options)) {
            $this->get('register', 'Auth\AuthController@showRegistrationForm');
            $this->post('register', 'Auth\AuthController@register');
        }

        // Password Reset Routes...
        if (in_array('password', $options)) {
            $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
            $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
            $this->post('password/reset', 'Auth\PasswordController@reset');
        }
    } else {
        // Authentication Routes...
        $this->get('login', 'Auth\AuthController@showLoginForm');
        $this->post('login', 'Auth\AuthController@login');
        $this->get('logout', 'Auth\AuthController@logout');

        // Registration Routes...
        $this->get('register', 'Auth\AuthController@showRegistrationForm');
        $this->post('register', 'Auth\AuthController@register');

        // Password Reset Routes...
        $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
        $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
        $this->post('password/reset', 'Auth\PasswordController@reset');
    }
}

对于您的情况,您可以只传递boolean作为参数而不是array。如果布尔值为true,则不加载register路由,否则加载所有内容。

希望它有所帮助。

答案 3 :(得分:1)

在新版本中,您可以这样做(在web.php文件中):

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

答案 4 :(得分:0)

您可以将重定向添加到/ register路由,如下所示:

<?php

Auth::routes();

// prevent registration, this needs to be after Auth::routes()
Route::redirect('register', '/home', 301);