[php] Laravel에서 신규 사용자 등록을 비활성화하는 방법

저는 Laravel (v5)을 사용하고 있습니다.

한 명의 사용자가 필요하며 이미 등록했습니다. 이제 새 사용자 등록을 비활성화하고 싶습니다. 물론 작동하려면 로그인 양식이 필요합니다.

어떻게 할 수 있습니까?



답변

Laravel 5.7은 다음 기능을 도입했습니다.

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

현재 가능한 옵션은 다음과 같습니다.

Auth::routes([
  'register' => false, // Registration Routes...
  'reset' => false, // Password Reset Routes...
  'verify' => false, // Email Verification Routes...
]);

이전 Laravel 버전은 무시 들어 showRegistrationForm()register()방법에

  • AuthController Laravel 5.0-5.4 용
  • Auth/RegisterController.php Laravel 5.5 용
public function showRegistrationForm()
{
    return redirect('login');
}

public function register()
{

}


답변

당신은 Laravel 5.2을 사용하면 함께 인증 관련 기능 설치 한 경우 php artisan make:auth다음 app/Http/routes.php단순히 호출하여 모든 인증 관련 경로를 포함 파일을 Route::auth().

auth () 메서드는에서 찾을 수 있습니다 vendor/laravel/framework/src/Illuminate/Routing/Router.php. 따라서 일부 사람들이 여기에서 제안한대로 원하지 않는 경로를 제거하여 등록을 비활성화하려면 (아마도 좋은 생각 일 것입니다) auth () 메서드에서 여전히 원하는 경로를 복사하여 넣어야합니다 app/Http/routes.php(Route에 대한 호출 대체). :: auth ()). 예를 들어 :

<?php
// This is app/Http/routes.php

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

// Registration Routes... removed!

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

5.2보다 낮은 버전을 사용하는 경우 아마도 다를 수 있습니다. 5.0 이후로 상황이 상당히 변경된 것을 기억합니다. 어떤 시점에서는 artisan make:authIIRC가 제거되었습니다.


답변

이것은 5.7의 새로운 기능 일 수 있지만 이제 auth 메소드에 대한 옵션 배열이 있습니다. 단순히 변경

Auth::routes();

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

실행 후 경로 파일에서 php artisan make:auth사용자 등록을 비활성화합니다.


답변

Laravel 5.3 및 5.4의 경우 적절한 방법은 다음과 같습니다.

변경해야합니다.

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

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

에서 응용 프로그램 / HTTP / 컨트롤러 / 인증 / RegisterController.php


답변

Laravel 5.7부터는 옵션 배열을 Auth::routes(). 그런 다음 다음을 사용하여 등록 경로를 비활성화 할 수 있습니다.

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

소스 코드에서 어떻게 작동하는지 볼 수 있습니다 : src / Illuminate / Routing / Router.php .


답변

버전 5.3의 방법 1

laravel 5.3에는 AuthController가 없습니다. 레지스터 경로를 비활성화하려면 다음과 RegisterController같이 생성자에서 변경해야합니다 .

양식을 변경할 수 있습니다.

public function __construct()
{

    $this->middleware('guest');

}

에:

use Illuminate\Support\Facades\Redirect;

public function __construct()
{

    Redirect::to('/')->send();

}

참고 : 사용
하려면 https : // host_name / register에 대한 사용자 액세스를 Redirect 잊지 마세요 . “/”로 리디렉션됩니다.user Redirect;

버전 5.3의 방법 2

사용 php artisan make:auth하면 Auth::route();
자동으로 추가 됩니다. /routes/web.php에서 경로를 재정의하십시오. 다음과 같이 변경할 수 있습니다. *이 줄에 주석을 추가해야합니다.Auth::routes();

    <?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/


// Auth::routes();
Route::get('/login', 'Auth\LoginController@showLoginForm' );
Route::post('/login', 'Auth\LoginController@login');
Route::post('/logout', 'Auth\LoginController@logout');

Route::get('/home', 'HomeController@index');

감사! 나는 그것이 당신의 문제를 해결할 수 있기를 바랍니다.


답변

getRegister 및 postRegister를 덮어 쓰는 것은 까다 롭습니다. git을 사용하는 경우 .gitignore프레임 워크 파일을 무시하도록 설정되어 프로덕션 환경에서 등록이 여전히 가능하다는 결과를 초래할 가능성이 높습니다 (예를 들어 laravel이 composer를 통해 설치된 경우) )

또 다른 가능성은 routes.php를 사용하고 다음 줄을 추가하는 것입니다.

Route::any('/auth/register','HomeController@index');

이렇게하면 프레임 워크 파일이 그대로 유지되고 모든 요청이 프레임 워크 등록 모듈에서 멀리 리디렉션됩니다.