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:auth
IIRC가 제거되었습니다.
이것은 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.blade
Laravel에서 오류가 발생합니다.
다음 방법은 훌륭하게 작동합니다.
모든 경로를 복사 /vendor/laravel/framework/src/Illuminate/Routing/Router.php
하여에 붙여넣고 web.php
주석 처리하거나 삭제하십시오 Auth::routes()
.
그런 다음 .env에서 등록을 활성화 및 비활성화하는 조건을 설정합니다. 503.blade.php
파일을 복제하고 views/errors
403 금지 또는 원하는 것을 만듭니다.
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
'code' 카테고리의 다른 글
PostgreSQL에서 세션 ID에 적합한 임의의 문자열을 어떻게 생성합니까? (0) | 2020.08.24 |
---|---|
데이터베이스 및 테이블을 생성하는 SQL 스크립트 생성 (0) | 2020.08.24 |
특정 확장자를 가진 모든 파일을 반복합니다. (0) | 2020.08.23 |
iOS 애플리케이션에서 최상위보기 / 창에 대한 참조 얻기 (0) | 2020.08.23 |
Git-일부 파일을 로컬에서 삭제했습니다. 원격 저장소에서 파일을 가져 오는 방법 (0) | 2020.08.23 |