Подтвердить что ты не робот

Как отключить регистрацию нового пользователя в Laravel 5

Я пытаюсь сделать однопользовательскую панель администратора (которая имеет только одного пользователя) в Laravel 5, и я зарегистрировал этого пользователя, поэтому теперь я хочу отключить регистрацию для новых пользователей, конечно, форма входа должна работать, но нет новый регистр отныне. как я могу это сделать?

Я использую вход пользователя по умолчанию и зарегистрируюсь в версии 5.

4b9b3361

Ответ 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;

в верхней части файла