Как отключить регистрацию нового пользователя в Laravel 5
Я пытаюсь сделать однопользовательскую панель администратора (у которой есть только один пользователь) в Laravel 5, и я зарегистрировал этого пользователя, поэтому теперь я хочу отключить регистрацию для новых пользователей, конечно, форма входа должна работать, но с этого момента нет нового регистра. как я могу это сделать?
Я использую логин пользователя по умолчанию и регистрируюсь в версии 5.
21 ответ:
просто переопределить
showRegistrationForm()
иregister()
методы
AuthController
для Laravel 5.0-5.4Auth/RegisterController.php
для Laravel 5.5public function showRegistrationForm() { return redirect('login'); } public function register() { }
если вы используете Laravel 5.2 и установили функцию auth, связанную с
php artisan make:auth
затем вашapp/Http/routes.php
файл будет включать в себя все auth-связанные маршруты, просто позвонивRoute::auth()
.метод auth () можно найти в
vendor/laravel/framework/src/Illuminate/Routing/Router.php
. Поэтому, если вы хотите сделать так, как некоторые люди предлагают здесь, и отключить регистрацию, удалив нежелательные маршруты( вероятно, хорошая идея), тогда вам нужно скопировать маршруты, которые вы все еще хотите, из метода auth () и поместить их вapp/Http/routes.php
(замена вызова на Маршрут:авт()). Так, например:<?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.
для Laravel 5.3 и 5.4, вот правильный способ сделать это:
надо менять:
public function __construct() { $this->middleware('guest'); }
до
public function __construct() { $this->middleware('auth'); }
на app/Http/Controller/Auth / RegisterController.php
метод 1 для версии 5.3
в laravel 5.3 нет AuthController. чтобы отключить регистрацию маршрута вы должны изменить в конструкторе
RegisterController
такой:вы можете менять форму:
public function __construct() { $this->middleware('guest'); }
to:
use Illuminate\Support\Facades\Redirect; public function __construct() { Redirect::to('/')->send(); }
Примечание: для использования
Redirect
не забудьтеuser Redirect;
Так что доступ пользователей к https://host_name/register это редирект на "/".Метод 2 для версии 5.3
при использовании
php artisan make:auth
он добавилAuth::route();
автоматически. Пожалуйста, переопределите маршрут в /routes / web.РНР. Вы можете изменить это: * вы должны прокомментировать эту строку: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)другая возможность-использование маршрутов.php и добавление этой строки:
Route::any('/auth/register','HomeController@index');
таким образом, файлы фреймворка остаются в покое, и любой запрос все равно будет перенаправлено из модуля регистр фреймворков.
AuthController.на PHP @лимонте имеет перезапись в App контроллеры\НТТР\\авт, нет в каталоге поставщика, так что Git не игнорировать эти изменения.
Я добавил эту функцию:
public function register() { return redirect('/'); } public function showRegistrationForm() { return redirect('/'); }
и оно работает правильно.
вот мое решение от 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 выдаст ошибку.
следующий метод отлично работает:
скопировать все маршруты из /поставщика/фреймворк Laravel/рамках/в src/освещения/маршрутизации/маршрутизатор.php и вставьте его в веб.php и закомментировать или удалить Auth:: routes().
затем установите условие для включения и отключения регистрации .ОКР. Дублировать 503.лезвие.php-файл в представлениях / ошибках и создать 403 запрещено или все, что вам нравится.
добавить ALLOW_USER_REGISTRATION= to .ОКР и контроля пользователей Регистрация путем установки его значения 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');
Это комбинация некоторых предыдущих ответов, в частности Рафала г. и Даниэля Центоре.
на
routes.php
, просто добавьте следующее:if (!env('ALLOW_REGISTRATION', false)) { Route::any('/register', function() { abort(403); }); }
тогда вы можете выборочно контролировать, разрешена ли регистрация или нет в вас .
В 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'); }
просто скопируйте маршруты, которые вы хотите / нужно, и вы в порядке!
Я должен был использовать:
public function getRegister() { return redirect('/'); }
С помощью Redirect::to () дал мне ошибку:
Class 'App\Http\Controllers\Auth\Redirect' not found
в laravel 5.3, вы должны переопределить значение по умолчанию
showRegistrationForm()
путем включения кода ниже в на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 }
поскольку вы не хотите разрешать регистрацию, лучше просто бросить
404 error
таким образом, злоумышленник знает, что он потерян. И когда вы будете готовы к регистрации в вашем приложении, раскомментируйте комментарийabort(404);
\\\\\\\\\\\\\\\\\\\\ПРОСТО FYI///////////////////////////////
Если вам нужно использовать несколько проверка подлинности как создать авторизацию для пользователей, сотрудников, студентов, администраторов и т. д. тогда я советую вам проверить это hesto / multi-auth его удивительный пакет для неограниченного адрес принадлежит локальной сети в Л5 приложения.
вы можете прочитать больше о методологии Auth и связанного с ней файла в этой рецензии.
В Laravel 5.5
Я пытался решить ту же проблему в Laravel 5.5. Вместо того, чтобы использовать
Auth::routes()
в интернете.php routes file, я включил только маршруты входа / выхода:Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout');
В Laravel 5.5
работа над аналогичной проблемой и установка аргумента middleware от гостя до "auth" казались более элегантным решением.
редактировать файл: приложение - > http - > контроллеры - >Auth - >RegisterController.php
public function __construct() { //replace this //$this->middleware('guest'); //with this argument. $this->middleware('auth'); }
Я могу ошибаться, хотя...но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и меньшим количеством shity, чем просто перенаправление page...at по крайней мере, в этом случае, желая заблокировать регистрацию для гости.
Я думаю, что это было бы лучше решение.
переопределите следующие методы, как указано ниже в
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); }
Я обнаружил, что это самое простое решение в laravel 5.6! Он перенаправляет всех, кто пытается перейти yoursite.com/register к yoursite.com
маршруты / web.php
// redirect from register page to home page Route::get('/register', function () { return redirect('/'); });
чтобы не слишком изменить код, как он есть, просто создайте промежуточное программное обеспечение, чтобы определить, является ли url-адрес запроса url('register'), а затем перенаправить на 404 или сделать где угодно.
в Laravel 5.5 очень просто, если вы используете CRUD route system.
на
app/http/controllers/RegisterController
есть пространства имен:Illuminate\Foundation\Auth\RegistersUser
вам нужно зайти в RegistersUser:
Illuminate\Foundation\Auth\RegistersUser
есть вызов метода
showRegistrationForm
изменить это:return view('auth.login');
для этого:return redirect()->route('auth.login');
и удалить из вас блейд-страницы маршрута вызова регистра. Это может выглядеть так:<li role="presentation"> <a class="nav-link" href="{{ route('register') }}">Register</a> </li>
все, что я сделал, это заменить регистр блейд-код на логин блейд-код. Таким образом, регистрация по-прежнему идет на вход.
resources/views/auth/register.blade.php
заменяетсяresources/views/auth/login.blade.php
для Laravel 5.6+, вставьте следующие методы в
app\Http\Controller\Auth\RegisterController
/* * Disabling registeration. * */ public function register() { return redirect('/'); } /* * Disabling registeration. * */ public function showRegistrationForm() { return redirect('/'); }
теперь вы переопределяете эти методы в
RegistersUser
черта, всякий раз, когда вы передумаете удалить этими методами. Вы также можете прокомментировать ссылки на регистр вwelcome.blade.php
иlogin.blade.php
вид.