Как отключить регистрацию нового пользователя в Laravel 5
Я пытаюсь сделать однопользовательскую панель администратора (которая имеет только одного пользователя) в Laravel 5, и я зарегистрировал этого пользователя, поэтому теперь я хочу отключить регистрацию для новых пользователей, конечно, форма входа должна работать, но нет новый регистр отныне. как я могу это сделать?
Я использую вход пользователя по умолчанию и зарегистрируюсь в версии 5.
Ответы
Ответ 1
В 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()
{
}
Ответ 2
Если вы используете Laravel 5.2 и вы установили связанные с ним функции с помощью 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
(заменив вызовите Route:: auth()). Так, например:
<?php
// This is app/Http/routes.php
// Authentication Routes...
Route::get('login', 'Auth\[email protected]');
Route::post('login', 'Auth\[email protected]');
Route::get('logout', 'Auth\[email protected]');
// Registration Routes... removed!
// Password Reset Routes...
Route::get('password/reset/{token?}', 'Auth\[email protected]');
Route::post('password/email', 'Auth\[email protected]');
Route::post('password/reset', 'Auth\[email protected]');
Если вы используете более низкую версию, чем 5.2, то это, вероятно, другое, я помню, что все изменилось совсем немного с 5,0, в какой-то момент artisan make:auth
был даже удален IIRC.
Ответ 3
Это может быть новым в 5.7, но теперь есть метод options для метода auth. Просто изменив Auth::routes();
в Auth::routes(['register' => false]);
в вашем файле маршрутов после запуска php artisan make:auth
отключит регистрацию пользователя.
Ответ 4
Для Laravel 5.3 и 5.4 здесь правильный способ:
Вы должны изменить:
public function __construct()
{
$this->middleware('guest');
}
к
public function __construct()
{
$this->middleware('auth');
}
в приложении/Http/Controller/Auth/RegisterController.php
Ответ 5
Начиная с Laravel 5.7, вы можете передавать массив опций в Auth::routes()
. Затем вы можете отключить регистр маршрутов с помощью:
Auth::routes(['register' => false]);
Вы можете увидеть, как это работает, из исходного кода: src/Illuminate/Routing/Router.php.
Ответ 6
Метод 1 для версии 5.3
В laravel 5.3 нет AuthController. чтобы отключить маршрут регистрации, вы должны изменить конструктор RegisterController
следующим образом:
Вы можете изменить форму:
public function __construct()
{
$this->middleware('guest');
}
чтобы:
use Illuminate\Support\Facades\Redirect;
public function __construct()
{
Redirect::to('/')->send();
}
Примечание: для использования Redirect
не забудьте user Redirect;
Таким образом, пользователь получает доступ к https://имя_хоста/регистрирует его перенаправление на "/".
Способ 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\[email protected]' );
Route::post('/login', 'Auth\[email protected]');
Route::post('/logout', 'Auth\[email protected]');
Route::get('/home', '[email protected]');
Спасибо! Я надеюсь, что это может решить ваши проблемы.
Ответ 7
Перезапись getRegister и postRegister сложна - если вы используете git, существует высокая вероятность того, что .gitignore
установлен на игнорирование файлов фреймворка, что приведет к тому, что регистрация будет по-прежнему возможна в вашей производственной среде ( если laravel установлен через композитор, например)
Другая возможность заключается в использовании routes.php и добавлении этой строки:
Route::any('/auth/register','[email protected]');
Таким образом, файлы фрейма остаются в силе, и любой запрос все равно будет перенаправлен из модуля регистра Framework.
Ответ 8
AuthController.php
@limonte находится в App\Http\Controllers\Auth
, а не в каталоге vendor, поэтому Git не игнорирует это изменение.
Я добавил эту функцию:
public function register() {
return redirect('/');
}
public function showRegistrationForm() {
return redirect('/');
}
и это работает правильно.
Ответ 9
LAravel 5.6
Auth::routes([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
Ответ 10
Вот мое решение по 5.4:
//Auth::routes();
// Authentication Routes...
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');
// Registration Routes...
//Route::get('register', 'Auth\[email protected]')->name('register');
//Route::post('register', 'Auth\[email protected]');
// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');
Примечание. Я прокомментировал Auth::routes()
и два маршрута регистрации.
Важно: вы также должны убедиться, что вы удаляете все экземпляры route('register')
в макете app.blade
, или Laravel выдает ошибку.
Ответ 11
Следующий метод прекрасно работает:
Скопируйте все маршруты из /vendor/laravel/framework/src/Illuminate/Routing/Router.php
и вставьте их в web.php
и закомментируйте или удалите Auth::routes()
web.php
Auth::routes()
.
Затем настройте условное, чтобы включить и отключить регистрацию из .env. Дублируйте файл 503.blade.php
в views/errors
и создайте 403 запрещенный или что угодно.
Добавьте ALLOW_USER_REGISTRATION=
в .env и управляйте регистрацией пользователя, установив для него значение true или false.
Теперь у вас есть полный контроль над маршрутами, а файлы Vendor остаются нетронутыми.
web.php
//Auth::routes();
// Authentication Routes...
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');
// Registration Routes...
if (env('ALLOW_USER_REGISTRATION', true))
{
Route::get('register', 'Auth\[email protected]')->name('register');
Route::post('register', 'Auth\[email protected]');
}
else
{
Route::match(['get','post'], 'register', function () {
return view('errors.403');
})->name('register');
}
// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');
Это комбинация некоторых предыдущих ответов, в частности Рафаля Г. и Даниэля Сенторе.
Ответ 12
На laravel 5.6 и выше вы можете редактировать в файле web.php
Auth::routes(['verify' => true, 'register' => false]);
и ты сможешь сделать это правдой, если передумаешь, мне так легко
Ответ 13
В routes.php
просто добавьте следующее:
if (!env('ALLOW_REGISTRATION', false)) {
Route::any('/register', function() {
abort(403);
});
}
Затем вы можете выборочно контролировать, разрешена ли регистрация в файле .env
.
Ответ 14
Мне пришлось использовать:
public function getRegister()
{
return redirect('/');
}
Использование Redirect:: to() дало мне ошибку:
Class 'App\Http\Controllers\Auth\Redirect' not found
Ответ 15
В 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\[email protected]')->name('login');
$this->post('login', 'Auth\[email protected]');
$this->post('logout', 'Auth\[email protected]')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\[email protected]')->name('register');
$this->post('register', 'Auth\[email protected]');
// Password Reset Routes...
$this->get('password/reset', 'Auth\[email protected]')->name('password.request');
$this->post('password/email', 'Auth\[email protected]')->name('password.email');
$this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
$this->post('password/reset', 'Auth\[email protected]');
}
Просто скопируйте маршруты, которые вам нужны/нужны, и вы в порядке!
Ответ 16
В laravel 5.3 вы должны переопределить значение по умолчанию showRegistrationForm()
, введя код ниже в файл RegisterController.php
в 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
, чтобы злоумышленник знал, что он потерян. И когда вы будете готовы к регистрации в своем приложении, раскомментируйте //return view('auth.register');
, затем прокомментируйте abort(404);
\\\\\\\\\\\\\\\\\\\\\\\ JUST FYI///////////////////////////////
Если вам нужно использовать множественную аутентификацию, например создать auth для пользователей, участников, студентов, администраторов и т.д., тогда я советую вам проверить это hesto/multi-auth его потрясающий пакет для неограниченных авторизаций в приложениях L5.
Вы можете прочитать больше абзацев по методологии Auth и связанного с ней файла в this writeup.
Ответ 17
В Laravel 5.5
Я пытался решить ту же проблему в Laravel 5.5. Вместо использования Auth::routes()
в файле маршрутов web.php я включил только маршруты входа/выхода:
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');
Ответ 18
Это было упомянуто в предыдущих комментариях, но я хотел бы уточнить, что существует несколько способов доступа к маршрутам авторизации в вашем файле web.php в Laravel ^ 5.7. в зависимости от вашей версии это может выглядеть немного иначе, но они достигают того же результата.
Первый вариант
Route::auth([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
Второй вариант
Auth::routes([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
Ответ 19
Чтобы не менять код, как раз, просто создайте промежуточное программное обеспечение, чтобы определить, является ли URL-адрес запроса url ( "register" ), затем перенаправляется на 404 или где угодно.
Ответ 20
В Laravel 5.5
Работа над подобной проблемой и установка аргумента промежуточного программного обеспечения от гостя до "auth" казались более элегантным решением.
Изменить файл: app- > http- > Controllers- > Auth- > RegisterController.php
public function __construct()
{
//replace this
//$this->middleware('guest');
//with this argument.
$this->middleware('auth');
}
Я мог бы ошибаться, хотя... но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и меньшей правдоподобностью, чем просто перенаправление страницы... по крайней мере, в этом случае, чтобы заблокировать регистрацию для гостей.
Ответ 21
Я думаю, что это было бы лучшим решением.
Переопределите следующие методы, как указано ниже в
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);
}
Ответ 22
В 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');
и удалите со своего блейд-страницы маршрутный реестр вызовов. Это может выглядеть так:
<li role="presentation">
<a class="nav-link" href="{{ route('register') }}">Register</a>
</li>
Ответ 23
Я обнаружил, что это самое простое решение в Laravel 5.6! Он перенаправляет всех, кто пытается перейти на yoursite.com/register на yoursite.com
маршруты/web.php
// redirect from register page to home page
Route::get('/register', function () {
return redirect('/');
});
Ответ 24
Все, что я сделал, это заменил код блейда регистра на код блейда логина. Таким образом, регистрация по-прежнему идет на вход.
resources/views/auth/register.blade.php
заменяется на resources/views/auth/login.blade.php
Ответ 25
Для 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
просмотров.
Ответ 26
добавить
use \Redirect;
в верхней части файла