Как отключить регистрацию новых пользователей в Laravel
130
Я использую Laravel (v5).
Мне нужен один пользователь, и я его уже зарегистрировал. Теперь я хочу отключить регистрацию для новых пользователей. Конечно, мне нужна форма входа для работы.
Просто удалите методы, связанные с регистром, из файла routes.php . Не заменяйте методы пустыми - это ужасный и хакерский подход, так как вам придется повторно добавить тела, если вы решите снова включить эту функцию в будущем.
Мартин Бин,
1
@MartinBean, в котором нет маршрутов routes.php. Чтобы включить функции аутентификации, все, что вам нужно сделать, это добавить Route::auth();в файл.
miken32
@ miken32 Мой комментарий был написан более пяти месяцев назад, до того, как было предложено Route::auth()сокращение.
Мартин Бин
5
если вы используете laravel 5.5 и выше, Auth::routes(['register' => false]);в web.php
Manojkiran.A
Ответы:
237
В Laravel 5.7 появилась следующая функциональность:
Было бы разумно также изменить функцию create () на: throw new Exception («Регистрация невозможна»);
JinX
2
или вы можете добавить abort(404)наfunction register()
William Notowidagdo
3
Я бы не стал защищать этот подход, так как перегрузка кода для удаления функции никогда не бывает хорошей. Только не регистрируйте маршруты, связанные с регистрацией.
Мартин Бин
4
Для Laravel 5.5 вставьте этоAuth/RegisterController.php
kapoko
7
В Laravel 5.7 showRegistrationForm()функция находится в vendorпапке, технически не рекомендуется редактировать файлы в папке поставщика. В основном я рекомендую удалить маршрут регистрации web.php. Вы можете просто сказать Auth::routes(['register' => false])в web.phpфайле. Ура!
Ахамед Рашид
55
Если вы используете 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.
Прежде всего, я попробовал Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });, но когда зарегистрированный пользователь запрашивает, /registerего перенаправляют на/
Sefran2,
1
@ Sefran2 Это потому, что AuthController вызывает (через другие классы и свойства, это немного запутано) промежуточное ПО App\Http\Middleware\RedirectIfAuthenticated. И это промежуточное ПО перенаправляет вас, /если вы уже вошли в систему. Что имеет смысл, зачем вам регистрироваться, если вы вошли в систему? :-) Если вы хотите разрешить только некоторые маршруты для определенных типов пользователей, вам нужно будет создать собственное промежуточное программное обеспечение вместо['middleware' => 'auth']
Rafał G.
2
Для версии 5.3 они снова разные, но их все еще можно найти в vendor / laravel / framework / src / Illuminate / Routing / Router.php
Matthieu
51
Это могло быть новым в 5.7, но теперь есть массив параметров для метода auth. Просто меняя
Auth::routes();
в
Auth::routes(['register'=>false]);
в вашем файле маршрутов после запуска php artisan make:authотключит регистрацию пользователя.
хорошая работа! Я думаю, что этот способ также защищает от запроса POST для создания пользователя по почте?
Гедиминас
3
это позволит увидеть страницу регистрации , который вы не хотели бы зарегистрированных пользователей
Ahmed
2
Используйте промежуточное программное обеспечение («auth»), а затем промежуточное программное обеспечение («гость»), чтобы обойти страницу регистрации для всех
user3425867
1
то в этом случае пользователь auth может зарегистрировать нового пользователя.
Мухаммад Азам
Да, это единственный правильный способ для всего, что ниже 5,7 .. как это не выбранный ответ
user3548161
31
Начиная с Laravel 5.7 вы можете передавать массив параметров в Auth::routes(). Затем вы можете отключить регистрацию маршрутов с помощью:
Примечание: для использования Redirect не забудьте. user Redirect;
Таким образом, пользовательский доступ к https: // host_name / register перенаправляет на "/".
Способ 2 для версии 5.3
Когда мы используем, 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');
Спасибо! Надеюсь, это поможет решить твои проблемы.
Я бы добавил имена маршрутов, как указано в vendor / laravel / framework / src / Illuminate / Routing / Router.php Route :: get ('login', 'Auth \ LoginController @ showLoginForm') -> name ('login'); Route :: post ('логин', 'Auth \ LoginController @ login'); Route :: post ('выход из системы', 'Auth \ LoginController @ logout') -> имя ('выход из системы');
Лучано Фантуцци
Класс перенаправления пропущен в первом методе, но изменение на $this->middleware('auth');- работает!
Гедиминас
12
Перезаписать getRegister и postRegister сложно - если вы используете git, существует высокая вероятность, что .gitignoreон настроен на игнорирование файлов фреймворка, что приведет к тому, что регистрация по-прежнему будет возможна в вашей производственной среде (если laravel установлен, например, через композитор) )
Другая возможность - использовать routes.php и добавить эту строку:
Классы, которые переопределяют методы фреймворка, не находятся в фреймворке (они будут в папке приложения) и будут сохранены git. Переопределение методов не означает, что вы меняете их в файлах фреймворка.
datashaman
11
AuthController.php@Limonte имеет переопределяется в App\Http\Controllers\Auth, а не в каталоге поставщика, поэтому Git не игнорировать эти изменения.
^ это. Если эти маршруты когда-либо изменятся, просто скопируйте / вставьте их из пакета Auth routes, расположенного по адресу @ github.com/laravel/framework/blob/…, и закомментируйте маршруты регистрации.
пбонд 04
7
Следующий метод отлично работает:
Скопируйте все маршруты из /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.
Теперь у вас есть полный контроль над маршрутами, а файлы поставщика остаются нетронутыми.
Спасибо, да, это функция новой версии, вы можете использовать эту функцию или использовать предыдущий класс, но предшествующий класс требует \ перед ним, я имею в виду \ Redirect :: to ('destination');
Милад Рахими
3
В Laravel 5.4
Вы можете найти все маршруты, которые зарегистрированы Auth::routes()в классе, \Illuminate\Routing\Routerв методеauth()
В laravel 5.3 вы должны переопределить значение showRegistrationForm()по умолчанию , включив приведенный ниже код в RegisterController.phpфайл вapp\Http\Controllers\Auth
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/publicfunction showRegistrationForm(){//return view('auth.register');
abort(404);//this will throw a page not found exception}
поскольку вы не хотите разрешать регистрацию, лучше просто бросить, 404 errorчтобы злоумышленник знал, что он потерян. И когда вы будете готовы к регистрации в своем приложении, раскомментируйте, а //return view('auth.register');затем комментируйтеabort(404);
\\\\\\\\\\\\\\\\\\\\ ТОЛЬКО К СВЕДЕНИЮ /////////////////////////// ////
Если вам нужно использовать множественную аутентификацию, например, создать аутентификацию для пользователей, участников, студентов, администратора и т. Д., Я советую вам проверить этот hesto / multi-auth, это отличный пакет для неограниченной аутентификации в приложениях L5.
Вы можете узнать больше о методологии Auth и связанном с ней файле в этой статье.
Об этом упоминалось в предыдущих комментариях, но я хотел бы уточнить, что существует несколько способов доступа к маршрутам авторизации в вашем файле web.php в Laravel ^ 5.7. в зависимости от вашей версии он может выглядеть немного иначе, но результат будет тот же.
Чтобы не слишком менять код как есть, просто создайте промежуточное программное обеспечение, чтобы определить, является ли URL-адрес запроса URL-адресом ('register'), а затем перенаправить на 404 или сделать что угодно.
publicfunction __construct(){//replace this//$this->middleware('guest');//with this argument.
$this->middleware('auth');}
Хотя я мог ошибаться ... но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и меньшим количеством шума, чем простое перенаправление страницы ... по крайней мере, в этом случае, когда вы хотите заблокировать регистрацию для гостей.
Мне было бы любопытно узнать, может ли пользователь регистрироваться несколько раз с помощью этого метода. guestпромежуточный слой отвечает перенаправление уже зарегистрированный пользователь от страницы , что только доступ гостя может (т.е. /registerстраница)
Кингли
0
Думаю, это было бы лучшим решением.
Переопределите следующие методы, как указано ниже в
Теперь вы переопределяете эти методы в RegistersUserтрейте, всякий раз, когда вы передумаете, удаляйте эти методы. Вы также можете комментировать ссылки для регистрации welcome.blade.phpи login.blade.phpпросмотры.
routes.php
. Чтобы включить функции аутентификации, все, что вам нужно сделать, это добавитьRoute::auth();
в файл.Route::auth()
сокращение.Auth::routes(['register' => false]);
в web.phpОтветы:
В Laravel 5.7 появилась следующая функциональность:
В настоящее время возможные варианты здесь:
Для более старых версий Laravel просто переопределите
showRegistrationForm()
иregister()
методы вAuthController
для Laravel 5.0 - 5.4Auth/RegisterController.php
для Laravel 5.5источник
abort(404)
наfunction register()
Auth/RegisterController.php
showRegistrationForm()
функция находится вvendor
папке, технически не рекомендуется редактировать файлы в папке поставщика. В основном я рекомендую удалить маршрут регистрацииweb.php
. Вы можете просто сказатьAuth::routes(['register' => false])
вweb.php
файле. Ура!Если вы используете 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 ()). Так например:Если вы используете более раннюю версию, чем 5.2, то, вероятно, все по-другому, я помню, что многое изменилось с 5.0, в какой-то момент
artisan make:auth
даже был удален IIRC.источник
Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });
, но когда зарегистрированный пользователь запрашивает,/register
его перенаправляют на/
App\Http\Middleware\RedirectIfAuthenticated
. И это промежуточное ПО перенаправляет вас,/
если вы уже вошли в систему. Что имеет смысл, зачем вам регистрироваться, если вы вошли в систему? :-) Если вы хотите разрешить только некоторые маршруты для определенных типов пользователей, вам нужно будет создать собственное промежуточное программное обеспечение вместо['middleware' => 'auth']
Это могло быть новым в 5.7, но теперь есть массив параметров для метода auth. Просто меняя
в
в вашем файле маршрутов после запуска
php artisan make:auth
отключит регистрацию пользователя.источник
Для Laravel 5.3 и 5.4 вот правильный способ сделать это:
Вам необходимо изменить:
в
в приложении / Http / Controller / Auth / RegisterController.php
источник
Начиная с Laravel 5.7 вы можете передавать массив параметров в
Auth::routes()
. Затем вы можете отключить регистрацию маршрутов с помощью:Вы можете увидеть, как это работает, из исходного кода: src / Illuminate / Routing / Router.php .
источник
Способ 1 для версии 5.3
В laravel 5.3 нет AuthController. чтобы отключить регистрационный маршрут, вы должны изменить конструктор
RegisterController
следующим образом:Вы можете изменить форму:
чтобы:
Примечание: для использования
Redirect
не забудьте.user Redirect;
Таким образом, пользовательский доступ к https: // host_name / register перенаправляет на "/".Способ 2 для версии 5.3
Когда мы используем,
php artisan make:auth
он добавляетсяAuth::route();
автоматически. Переопределите маршрут в /routes/web.php. Вы можете изменить это так: * вам нужно прокомментировать эту строку:Auth::routes();
Спасибо! Надеюсь, это поможет решить твои проблемы.
источник
$this->middleware('auth');
- работает!Перезаписать getRegister и postRegister сложно - если вы используете git, существует высокая вероятность, что
.gitignore
он настроен на игнорирование файлов фреймворка, что приведет к тому, что регистрация по-прежнему будет возможна в вашей производственной среде (если laravel установлен, например, через композитор) )Другая возможность - использовать routes.php и добавить эту строку:
Таким образом, файлы фреймворка остаются в покое, и любой запрос все равно будет перенаправлен из модуля регистрации фреймворков.
источник
AuthController.php
@Limonte имеет переопределяется вApp\Http\Controllers\Auth
, а не в каталоге поставщика, поэтому Git не игнорировать эти изменения.Я добавил следующие функции:
и работает правильно.
источник
LAravel 5.6
источник
Вот мое решение с 5.4:
Обратите внимание, я закомментировал
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
Это комбинация некоторых предыдущих ответов, в частности Рафаля Г. и Даниэля Сенторе.
источник
В laravel 5.6 и выше вы можете редактировать в файле web.php
И вы можете сделать это правдой, если передумаете, я вижу это легко
источник
В
routes.php
, добавьте следующую строку:Затем вы можете выборочно контролировать, разрешена ли регистрация в вашем
.env
файле.источник
Пришлось использовать:
Использование Redirect :: to () дало мне ошибку:
источник
В Laravel 5.4
Вы можете найти все маршруты, которые зарегистрированы
Auth::routes()
в классе,\Illuminate\Routing\Router
в методеauth()
это выглядит так:
Просто скопируйте маршруты, которые вам нужны / нужны, и все в порядке!
источник
В laravel 5.3 вы должны переопределить значение
showRegistrationForm()
по умолчанию , включив приведенный ниже код вRegisterController.php
файл вapp\Http\Controllers\Auth
поскольку вы не хотите разрешать регистрацию, лучше просто бросить,
404 error
чтобы злоумышленник знал, что он потерян. И когда вы будете готовы к регистрации в своем приложении, раскомментируйте, а//return view('auth.register');
затем комментируйтеabort(404);
\\\\\\\\\\\\\\\\\\\\ ТОЛЬКО К СВЕДЕНИЮ /////////////////////////// ////
Если вам нужно использовать множественную аутентификацию, например, создать аутентификацию для пользователей, участников, студентов, администратора и т. Д., Я советую вам проверить этот hesto / multi-auth, это отличный пакет для неограниченной аутентификации в приложениях L5.
Вы можете узнать больше о методологии Auth и связанном с ней файле в этой статье.
источник
В Laravel 5.5
Я пытался решить ту же проблему в Laravel 5.5. Вместо использования
Auth::routes()
в файле маршрутов web.php я включил только маршруты входа / выхода:источник
Об этом упоминалось в предыдущих комментариях, но я хотел бы уточнить, что существует несколько способов доступа к маршрутам авторизации в вашем файле web.php в Laravel ^ 5.7. в зависимости от вашей версии он может выглядеть немного иначе, но результат будет тот же.
Первый вариант
Второй вариант
источник
источник
Чтобы не слишком менять код как есть, просто создайте промежуточное программное обеспечение, чтобы определить, является ли URL-адрес запроса URL-адресом ('register'), а затем перенаправить на 404 или сделать что угодно.
источник
В Laravel 5.5
Работа над аналогичной проблемой и установка аргумента промежуточного программного обеспечения с гостя на auth казались более элегантным решением.
Редактировать файл: app-> http-> Controllers-> Auth-> RegisterController.php
Хотя я мог ошибаться ... но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и меньшим количеством шума, чем простое перенаправление страницы ... по крайней мере, в этом случае, когда вы хотите заблокировать регистрацию для гостей.
источник
guest
промежуточный слой отвечает перенаправление уже зарегистрированный пользователь от страницы , что только доступ гостя может (т.е./register
страница)Думаю, это было бы лучшим решением.
Переопределите следующие методы, как указано ниже в
App \ Http \ Controller \ Auth \ RegisterController.php
источник
В Laravel 5.5 все очень просто, если вы используете систему маршрутов CRUD.
Перейдите в
app/http/controllers/RegisterController
пространство имен:Illuminate\Foundation\Auth\RegistersUser
Вам нужно зайти в RegistersUser:
Illuminate\Foundation\Auth\RegistersUser
Существует вызов метода:
showRegistrationForm
измените это:return view('auth.login');
для этого:return redirect()->route('auth.login');
и удалите из реестра вызовов маршрута лезвия страницы. Это может выглядеть так:источник
Я обнаружил, что это самое простое решение в laravel 5.6! Он перенаправляет всех, кто пытается перейти на yoursite.com/register, на yoursite.com.
маршруты / web.php
источник
Все, что я сделал, это заменил код лезвия регистрации на код лезвия входа. Таким образом, регистрация по-прежнему переходит в логин.
resources/views/auth/register.blade.php
заменяется наresources/views/auth/login.blade.php
источник
Для Laravel 5.6+ вставьте следующие методы в
app\Http\Controller\Auth\RegisterController
Теперь вы переопределяете эти методы в
RegistersUser
трейте, всякий раз, когда вы передумаете, удаляйте эти методы. Вы также можете комментировать ссылки для регистрацииwelcome.blade.php
иlogin.blade.php
просмотры.источник
Добавить
вверху файла
источник