Я пытаюсь сделать однопользовательскую панель администратора (у которой есть только один пользователь) в Laravel 5, и я зарегистрировал этого пользователя, поэтому теперь я хочу отключить регистрацию для новых пользователей, конечно, форма входа должна работать, но нет нового регистра сейчас на. Как мне это сделать?
Я использую вход пользователя по умолчанию и регистрируюсь в версии 5.
Просто переопределите showRegistrationForm()
и register()
в AuthController
:
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
(заменив вызов 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 лет все изменилось совсем немного, в какой-то момент artisan make:auth
был даже удален IIRC.
В laravel 5.3 нет AuthController. для отключения маршрута регистрации вам необходимо изменить конструктор RegisterController
следующим образом:
Вы можете изменить форму:
public function __construct() { $this->middleware('guest'); }
чтобы:
public function __construct() { Redirect::to('/')->send(); }
Примечание: для использования Redirect
не забудьте user Redirect;
Таким образом, пользовательский доступ к https: // host_name / register перенаправляется на «/».
Когда мы используем 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');
Благодаря! Надеюсь, это может решить ваши проблемы.
Для Laravel 5.3 и 5.4 здесь правильный способ сделать это:
Вы должны изменить:
public function __construct() { $this->middleware('guest'); }
в
public function __construct() { $this->middleware('auth'); }
в приложении / Http / Controller / Auth / RegisterController.php
Перезапись getRegister и postRegister сложна – если вы используете git, существует высокая вероятность того, что .gitignore
настроен на игнорирование файлов фреймворка, что приведет к тому, что регистрация будет по-прежнему возможна в вашей производственной среде (если laravel устанавливается через композитор например)
Другая возможность – route.php и добавление этой строки:
Route::any('/auth/register','HomeController@index');
Таким образом, файлы фреймов остаются в силе, и любой запрос по-прежнему будет перенаправлен от модуля регистра Framework.
AuthController.php @limonte перезаписывается в App \ Http \ Controllers \ Auth, а не в каталоге поставщика, поэтому Git не игнорирует это изменение.
Я добавил следующие функции:
public function register() { return redirect('/'); } public function showRegistrationForm() { return redirect('/'); }
и он работает правильно.
Heres мое решение по 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 app.blade
ошибку.
Следующий метод отлично работает:
Скопируйте все маршруты из /vendor/laravel/framework/src/Illuminate/Routing/Router.php и вставьте его в web.php и закомментируйте или удалите Auth :: routes ().
Затем установите условное значение для включения и отключения регистрации с .env. Дублируйте файл 503.blade.php в просмотрах / ошибках и создайте запрещенный или запрещенный вами контент.
Добавьте ALLOW_USER_REGISTRATION = в .env и контролируйте регистрацию пользователя, установив его значение в true или false.
Теперь у вас есть полный контроль над маршрутами, и файлы Vendor остаются нетронутыми.
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');
Это комбинация некоторых предыдущих ответов, в частности, Rafal G. и Daniel Centore.
В routes.php
просто добавьте следующее:
if (!env('ALLOW_REGISTRATION', false)) { Route::any('/register', function() { abort(403); }); }
Затем вы можете выборочно контролировать, разрешена ли регистрация или нет в .env
файле .env
.
Мне пришлось использовать:
public function getRegister() { return redirect('/'); }
Использование Redirect :: to () дало мне ошибку:
Class 'App\Http\Controllers\Auth\Redirect' not found
Вы можете найти все маршруты, зарегистрированные через 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'); }
Просто скопируйте маршруты, которые вам нужны, и вы в порядке!
В 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
чтобы злоумышленник знал, что он потерян. И когда вы готовы к регистрации в своем приложении, uncomment //return view('auth.register');
затем комментарий abort(404);
\\\\\\\\\\\\\\ JUST FYI /////////////////////////// ////
Если вам нужно использовать множественную аутентификацию, например, создать auth для пользователей, участников, студентов, администраторов и т. Д., То я советую вам проверить этот hesto / multi-auth свой удивительный пакет для неограниченного количества авторизаций в приложениях L5.
Вы можете прочитать больше абзацев методологию Auth и связанный с ней файл в этой записи .
В Laravel 5.5
Я пытался решить ту же проблему в Laravel 5.5. Вместо использования Auth::routes()
в файле маршрутов web.php я включил только маршруты входа / выхода:
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout');
Чтобы не менять код так, как он есть, просто создайте промежуточное программное обеспечение, чтобы определить, является ли URL-адрес запроса url («register»), затем перенаправляется на 404 или где угодно.
В Laravel 5.5
Работа над подобной проблемой и установка аргумента промежуточного программного обеспечения от гостя до «auth» казались более элегантным решением.
Редактировать файл: app-> http-> Controllers-> Auth-> RegisterController.php
public function __construct() { //replace this //$this->middleware('guest'); //with this argument. $this->middleware('auth'); }
Я мог бы ошибаться, хотя … но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и менее правдоподобным, чем просто перенаправление страницы … по крайней мере в этом случае, желая заблокировать регистрацию для гостей.
Добавить
use \Redirect;
в верхней части файла