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


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

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

21 68

21 ответ:

просто переопределить 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 и установили функцию 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 вид.

добавить

use \Redirect;

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