Laravel 5.4 Отключить маршрут регистрации
Я пытаюсь отключить маршрут регистрации в моем приложении, которое работает в Laravel 5.4.
В моем файле маршрутов у меня есть только
Auth::routes();
Есть ли способ отключить реестр маршрутов?
Ответы
Ответ 1
code
:
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]');
Таким образом, вы можете заменить первый список маршрутами и закомментировать любой маршрут, который вам не нужен в вашем приложении.
Редактировать для laravel version => 5.7
В более новых версиях вы можете добавить параметр к вызову функции Auth::routes()
, чтобы отключить регистры маршрутов:
Auth::routes(['register' => false]);
Добавлены маршруты проверки электронной почты:
Route::get('email/verify', 'Auth\[email protected]')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\[email protected]')->name('verification.verify');
Route::get('email/resend', 'Auth\[email protected]')->name('verification.resend');
Кстати, вы также можете отключить маршруты Password Reset
и Email Verification
:
Auth::routes(['reset' => false, 'verify' => false]);
Ответ 2
Начиная с Laravel 5.7, в метод Auth::routes()
введен новый $options
; через который вы можете передать массив для управления генерацией необходимых маршрутов для аутентификации пользователя (допустимые записи могут быть выбраны из строковых литералов 'register'
, 'reset'
или 'verify'
).
Auth::routes(['register' => false]);
Ответ 3
Вы можете попробовать это.
Route::match(['get', 'post'], 'register', function(){
return redirect('/');
});
Добавьте эти маршруты чуть ниже Auth::routes()
, чтобы переопределить маршруты регистрации по умолчанию. Любой запрос маршрута /register
будет перенаправлен на baseUrl.
Ответ 4
Это обманчиво легко! Вам просто нужно переопределить два метода в классе app/Http/Controllers/Auth/RegisterController.php
. См. Ниже, что предотвратит отображение формы и, самое главное, заблокирует прямые запросы POST для вашего приложения для регистрации.
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/
public function showRegistrationForm()
{
return redirect('login');
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
abort(404);
}
Ответ 5
В web.php, заменить
Auth::routes();
С
Auth::routes(['register' => false]);
Так что вы можете удалить регистр маршрута из списка маршрутов аутентификации по умолчанию. Я пытался в 5.7, и он работал нормально.
Ответ 6
Хотя вышеупомянутые решения работают, но я думаю, что изменение middleware
до 'auth'
в App\Http\Controllers\Auth\RegisterController
будет одним из самых простых решений. Это приведет к перенаправлению всех посетителей на страницу входа, если они хотят получить доступ к любому из путей регистрации. Вот так:
namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
Ответ 7
Я думаю, вы можете сделать это так, в вашем файле web.php:
Route::redirect('register', 'login', 301);
Ответ 8
Я предполагаю, что вы хотите ограничить доступ к некоторым страницам для гостей, и только администратор может зарегистрировать гостя. Вы можете достичь этого, добавив свое собственное промежуточное ПО в файл kernel.php, как показано ниже:
protected $routeMiddleware = [
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
];
После создания промежуточного программного обеспечения вы должны использовать его, чтобы вы могли перейти в файл web.php, где находятся ваши маршруты, и добавить его к маршруту, который вы хотите ограничить, как показано ниже:
Route::get('register', 'Auth\[email protected]')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\[email protected]')->middleware('authenticated');
Таким образом, регистрация ограничена гостями, но администратор все равно может получить доступ к странице, если он когда-либо захочет зарегистрировать другого администратора!
Не забудьте заменить 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')->middleware('authenticated');
Route::post('register', 'Auth\[email protected]')->middleware('authenticated');
// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]etLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');
Ответ 9
На моем проекте Laravel 5.6 этот метод не работал:
Auth::routes(['register' => false]);
Поэтому мне пришлось использовать следующий метод:
Route::match(['get', 'post'], 'register', function() { return abort(403, 'Forbidden'); })->name('register');
Ответ 10
Переименуйте RegisterController на любое другое имя или удалите его: -)
Ответ 11
Добавьте эти два метода в app\Http\Controllers\Auth\RegisterController.php
public function showRegistrationForm(){
return redirect('login');
}
public function register(){
}
Ответ 12
Просто перезапишите свой метод showRegistrationForm() (поместите этот код в свой Auth/RegisterController)
public function showRegistrationForm() { return redirect()->route('login'); }
Я просто перенаправляю свой маршрут регистрации на маршрут входа. Здесь вам не нужно добавлять или удалять любой другой код
Ответ 13
Да, есть способ
Auth::routes();
Удалите этот маршрут из вашего web.php в каталоге маршрутов.
Этот маршрут контролирует регистрацию.
Ответ 14
Изменить на маршруты:
поставщика\Laravel\рамки\SRC\Осветите\Routing\router.php
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]');
}