Я пытаюсь отключить регистрационный маршрут в моем приложении, которое работает в Laravel 5.4.
В моем файле маршрутов у меня есть только
Auth::routes();
Есть ли способ отключить регистрацию маршрутов?
Я пытаюсь отключить регистрационный маршрут в моем приложении, которое работает в Laravel 5.4.
В моем файле маршрутов у меня есть только
Auth::routes();
Есть ли способ отключить регистрацию маршрутов?
code
:
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');
Таким образом, вы можете заменить первое на список маршрутов и закомментировать любой маршрут, который вам не нужен в вашем приложении.
Изменить для laravel version => 5.7
В более новых версиях вы можете добавить параметр к вызову функции Auth::routes()
, чтобы отключить регистрацию маршрутов:
Auth::routes(['register' => false]);
Добавлены маршруты проверки электронной почты:
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
Кстати, вы также можете отключить маршруты Password Reset
и Email Verification
:
Auth::routes(['reset' => false, 'verify' => false]);
Auth::routes(['register' => false]);
, зачем?
- person Haritsinh Gohil; 17.07.2019
Auth::routes()
не принимает никаких аргументов, которые были введены только в более поздних версиях.
- person dparoli; 17.07.2019
Auth::routes()
поддерживает аргумент после laravel 5.7, но вы также можете сделать это в версии laravel ‹5.7 Route::redirect('register', 'login', 301);
, которая выглядит проще, чем указано выше, не так ли ?
- person Haritsinh Gohil; 17.07.2019
Route::redirect()
не существовала.
- person dparoli; 17.07.2019
redirect
также добавлен в laravel 5.5
, извините, спасибо за очистку.
- person Haritsinh Gohil; 17.07.2019
Начиная с Laravel 5.7, в $options > Метод Auth::routes()
; через который вы можете передать массив для управления генерацией необходимых маршрутов для аутентификации пользователя (допустимые записи могут быть выбраны из строковых литералов 'register'
, 'reset'
или 'verify'
).
Auth::routes(['register' => false]);
Auth::routes(['verify' => true]);
- person Grant; 09.11.2018
Вы можете попробовать это.
Route::match(['get', 'post'], 'register', function(){
return redirect('/');
});
Добавьте эти маршруты чуть ниже Auth::routes()
, чтобы переопределить маршруты регистрации по умолчанию. Любой запрос к маршруту /register
будет перенаправлен на baseUrl.
/login
страницу.
- person Jason; 25.05.2017
Это обманчиво просто! Вам просто нужно переопределить два метода в вашем 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);
}
В web.php замените
Auth::routes();
С участием
Auth::routes(['register' => false]);
Так что вы можете удалить зарегистрированный маршрут из списка маршрутов аутентификации по умолчанию. Я пробовал в 5.7, и он работал нормально.
Хотя приведенные выше решения работают, но я думаю, что изменение middleware
на 'auth'
в App\Http\Controllers\Auth\RegisterController
будет одним из самых простых решений. Это перенаправит всех посетителей на страницу входа, если они захотят получить доступ к любому из маршрутов регистрации. Нравится:
namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
В моем проекте Laravel 5.6 этот метод не работал:
Auth::routes(['register' => false]);
Поэтому мне пришлось использовать следующий метод:
Route::match(['get', 'post'], 'register', function () {
return abort(403, 'Forbidden');
})->name('register');
Я полагаю, вы хотите ограничить доступ к некоторым страницам для гостей, и только администратор может зарегистрировать гостя. Вы можете добиться этого, добавив собственное промежуточное ПО в файл kernel.php, как показано ниже:
protected $routeMiddleware = [
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
];
После создания промежуточного программного обеспечения вы должны использовать его, чтобы вы могли перейти в файл web.php, где находятся ваши маршруты, и добавить его к маршруту, который вы хотите ограничить, как показано ниже:
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
Таким образом, регистрация ограничена для гостей, но администратор все еще может получить доступ к странице, если он когда-либо захочет зарегистрировать другого администратора!
Не забудьте заменить 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')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');
// 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');
Я думаю, вы можете сделать это так, в своем файле web.php:
Route::redirect('register', 'login', 301);
Добавьте эти два метода в app \ Http \ Controllers \ Auth \ RegisterController.php
public function showRegistrationForm(){
return redirect('login');
}
public function register(){
}
Просто перезапишите свой метод аутентификации showRegistrationForm () (поместите этот код в свой Auth / RegisterController).
public function showRegistrationForm(){
return redirect()->route('login');
}
Я просто перенаправляю свой регистрационный маршрут на маршрут входа. Здесь вам не нужно добавлять или удалять какой-либо другой код
Да есть способ
Auth::routes();
Удалите этот маршрут из вашего web.php в каталоге маршрутов.
Этот маршрут и контролирует регистрацию.
Auth::routes();
- это ярлык для набора маршрутов согласно документации. Если вы удалите Auth::routes();
, вы сможете вводить любые маршруты, которые действительно хотите по отдельности (например, вход в систему). Я подумал, что это было само собой разумеющимся, потому что документация охватывала это - видимо, я был неправ. Этот ответ технически верен и верен. Я не знаю, почему люди все еще голосуют против ... это буквально половина принятого ответа.
- person Hanny; 10.04.2018
Изменить на маршруты:
поставщик \ laravel \ framework \ src \ Illuminate \ Routing \ Router.php
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');
}
Auth::routes(['register' => false]);
- person Zohaib   schedule 22.09.2018