code

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

codestyles 2020. 8. 24. 08:21
반응형

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


라 라벨 5에서 ​​단일 사용자 관리자 패널 (사용자가 한 명만 있음)을 만들려고하는데 해당 사용자를 등록 했으므로 이제 새 사용자에 대한 등록을 비활성화하고 싶습니다. 물론 로그인 양식이 작동해야하지만 새 등록은 지금. 어떻게 할 수 있습니까?

기본 사용자 로그인을 사용하고 버전 5에 등록합니다.


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

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


AuthController.php@limonte는에 오버라이드 (override)가 App\Http\Controllers\Auth망할 놈의이 변화를 무시하지 않도록 아닌 공급 업체 디렉토리.

이 기능을 추가했습니다.

public function register() {
    return redirect('/');
}

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

제대로 작동합니다.


LAravel 5.6

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

5.4의 내 솔루션은 다음과 같습니다.

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

내가 주석을 달았고 Auth::routes()두 개의 등록 경로를 확인하십시오.

중요 : 레이아웃 route('register')에서의 모든 인스턴스를 제거해야합니다 . 그렇지 않으면 app.bladeLaravel에서 오류가 발생합니다.


다음 방법은 훌륭하게 작동합니다.

모든 경로를 복사 /vendor/laravel/framework/src/Illuminate/Routing/Router.php하여에 붙여넣고 web.php주석 처리하거나 삭제하십시오 Auth::routes().

그런 다음 .env에서 등록을 활성화 및 비활성화하는 조건을 설정합니다. 503.blade.php파일을 복제하고 views/errors403 금지 또는 원하는 것을 만듭니다.

ALLOW_USER_REGISTRATION=.env에 추가 하고 해당 값을 true 또는 false로 설정하여 사용자 등록을 제어합니다.

이제 경로를 완전히 제어 할 수 있으며 공급 업체 파일은 그대로 유지됩니다.

web.php

//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...
if (env('ALLOW_USER_REGISTRATION', true))
{
    Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
    Route::post('register', 'Auth\RegisterController@register');
}
else
{
    Route::match(['get','post'], 'register', function () {
        return view('errors.403');
    })->name('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');

이것은 이전 답변, 특히 Rafal G.와 Daniel Centore의 조합입니다.


laravel 5.6 이상에서는 web.php 파일 에서 편집 할 수 있습니다.

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

마음이 바뀌면 사실로 만들 수 있습니다.


에서는 routes.php, 단지 다음을 추가합니다 :

if (!env('ALLOW_REGISTRATION', false)) {
    Route::any('/register', function() {
        abort(403);
    });
}

그런 다음 .env파일 에서 등록 허용 여부를 선택적으로 제어 할 수 있습니다 .


나는 사용해야했다 :

public function getRegister()
{
    return redirect('/');
}

Redirect :: to () 사용하면 오류가 발생했습니다.

Class 'App\Http\Controllers\Auth\Redirect' not found

Laravel 5.4에서

메서드 Auth::routes()의 클래스 \Illuminate\Routing\Router등록 된 모든 경로를 찾을 수 있습니다.auth()

다음과 같이 보입니다.

/**
 * Register the typical authentication routes for an application.
 *
 * @return void
 */
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');
}

원하는 / 필요한 경로를 복사하면 괜찮습니다!


In laravel 5.3, you should override the default showRegistrationForm() by including the code below into the RegisterController.php file in app\Http\Controllers\Auth

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        //return view('auth.register');
         abort(404);  //this will throw a page not found exception
    }

since you don't want to allow registration, it's better to just throw 404 error so the intruder knows he is lost. And when you are ready for registraation in your app, uncomment //return view('auth.register'); then comment abort(404);

\\\\\\\\\\\\\\\\\\\\JUST AN FYI///////////////////////////////

If you need to use multiple authentication like create auth for users, members, students, admin, etc. then i advise you checkout this hesto/multi-auth its an awesome package for unlimited auths in L5 apps.

You can read more abouth the Auth methodology and its associated file in this writeup.


In Laravel 5.5

I was trying to accomplish the same problem in Laravel 5.5. Instead of using Auth::routes() in the web.php routes file, I only included the login/logout routes:

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

This has been mentioned in earlier comments but I would like to clarify that there are multiple ways to access the auth routes in your web.php file in Laravel ^5.7. depending on your version it might look a little different but they achieve the same result.

First option

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

Second option

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

In order not too change the code as it is, just create a middleware to detect if the request url is url('register'), then redirect to 404 or do wherever.


In Laravel 5.5

Working on a similar issue and setting the middleware argument from guest to 'auth' seemed like a more elegant solution.

Edit File: app->http->Controllers->Auth->RegisterController.php

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

     //with this argument.
       $this->middleware('auth');
}

I could be wrong though...but it seems more slick than editing the routing with more lines and less shity than simply redirecting the page...at least in this instance, wanting to lock down the registration for guests.


I guess this would rather be a better solution.

Override the following methods as below mentioned in

App\Http\Controller\Auth\RegisterController.php

use Illuminate\Http\Response;

.
.
.

public function showRegistrationForm()
{
    abort(Response::HTTP_NOT_FOUND);
}

public function register(Request $request)
{
    abort(Response::HTTP_NOT_FOUND);
}

In Laravel 5.5 is very simple, if you are using CRUD route system.

Go to app/http/controllers/RegisterController there is namespace: Illuminate\Foundation\Auth\RegistersUser

You need to go to the RegistersUser: Illuminate\Foundation\Auth\RegistersUser

There is the method call showRegistrationForm change this: return view('auth.login'); for this: return redirect()->route('auth.login'); and remove from you blade page route call register. It may look like that:

 <li role="presentation">
     <a class="nav-link" href="{{ route('register') }}">Register</a>
 </li> 

I found this to be the easiest solution in laravel 5.6! It redirects anyone who tries to go to yoursite.com/register to yoursite.com

routes/web.php

// redirect from register page to home page
Route::get('/register', function () {
    return redirect('/');
});

All I did was replace register blade code with login blade code. That way register still goes to login.

resources/views/auth/register.blade.php is replaced with resources/views/auth/login.blade.php


For Laravel 5.6+, paste the below methods in app\Http\Controller\Auth\RegisterController

/*
* Disabling registeration.
*
*/
public function register() 
{
    return redirect('/');
}

/*
* Disabling registeration.
*
*/
public function showRegistrationForm() 
{
    return redirect('/');
}

Now you're overriding those methods in RegistersUser trait, whenever you change your mind remove these methods. You may also comment the register links in welcome.blade.php and login.blade.php views.


add

use \Redirect;

at the top of the file

참고URL : https://stackoverflow.com/questions/29183348/how-to-disable-registration-new-user-in-laravel-5

반응형