php - relacionadas - Laravel 5.4 Deshabilitar registro de ruta
relacion muchos a muchos laravel (10)
Estoy intentando desactivar la ruta de registro en mi aplicación que ejecuta Laravel 5.4.
En mi archivo de rutas solo tengo el Auth :: route ();
¿Hay alguna manera de deshabilitar la ruta de registro?
¡Esto es engañosamente fácil! Solo debe anular dos métodos en su app/Http/Controllers/Auth/RegisterController.php
Class. Vea a continuación, lo que evitará que se muestre el formulario y, lo que es más importante, bloqueará las solicitudes POST directas a su solicitud de registro.
/**
* 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);
}
Aunque las soluciones anteriores funcionan, pero creo que cambiar el middleware
a ''auth''
en App/Http/Controllers/Auth/RegisterController
será una de las soluciones más fáciles. Esto redirigirá a todos los visitantes a la página de inicio de sesión si desean acceder a cualquiera de las rutas de registro. Me gusta esto:
namespace App/Http/Controllers/Auth;
class RegisterController extends Controller
{
public function __construct()
{
$this->middleware(''auth'');
}
Cambio a rutas:
vendedor / 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'');
}
Desde Laravel 5.0 solo puedes pasar y organizar con opciones
Auth::routes([''register'' => false]);
Puede revisar el código Illuminate / Routing / Router @ auth
El código:
Auth::routes();
Es un atajo para esta colección de rutas:
// 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'');
Por lo tanto, puede sustituir el primero con la lista de rutas y comentar cualquier ruta que no desee en su aplicación.
En web.php, reemplazar
Auth::routes();
Con
Auth::routes([''register'' => false]);
Para que pueda eliminar la ruta de registro de la lista de rutas de autenticación predeterminada. Lo intenté en 5.7 y funcionó bien.
Podrías intentar esto.
Route::match([''get'', ''post''], ''register'', function(){
return redirect(''/'');
});
Agregue esas rutas justo debajo de Auth::routes()
para anular las rutas de registro predeterminadas. Cualquier solicitud a la ruta /register
se redireccionará a la baseUrl.
Sí, hay una manera
Auth::routes();
Remota esa ruta desde tu web.php en tu directorio de rutas.
Esa ruta es lo que controla el registro.
Supongo que desea restringir el acceso a algunas páginas para invitados y solo el administrador puede registrar un invitado. Puede lograrlo agregando su propio middleware en el archivo kernel.php como se muestra a continuación:
protected $routeMiddleware = [
''authenticated'' => /App/Http/Middleware/AuthenticatedMiddleware::class
];
Después de crear el middleware, debe usarlo para poder ir al archivo web.php donde están sus rutas y agregarlo a la ruta que desea restringir, como a continuación:
Route::get(''register'', ''Auth/RegisterController@showRegistrationForm'')->name(''register'')->middleware(''authenticated'');
Route::post(''register'', ''Auth/RegisterController@register'')->middleware(''authenticated'');
De esta manera, el registro está restringido para invitados, pero el administrador todavía puede acceder a la página si alguna vez desea registrar a otro administrador.
No te olvides de reemplazar el Auth::routes();
con la lista detallada a continuación:
// 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'');
Supongo que puedes hacerlo así, en tu archivo web.php:
Route::redirect(''register'', ''login'', 301);