Cómo deshabilitar el registro de nuevos usuarios en Laravel
130
Estoy usando Laravel (v5).
Necesito un usuario y ya lo he registrado. Ahora quiero deshabilitar el registro para nuevos usuarios. Por supuesto, necesito el formulario de inicio de sesión para trabajar.
Simplemente elimine los métodos relacionados con el registro de su archivo routes.php . No anule los métodos con métodos en blanco: es un enfoque horrible y hack-y ya que luego debe volver a agregar los cuerpos si decide volver a habilitar esa función en el futuro.
Martin Bean
1
@MartinBean no hay rutas en routes.php. Para habilitar las funciones de autenticación, todo lo que debe hacer es agregar Route::auth();al archivo.
miken32
@ miken32 Mi comentario fue de hace más de cinco meses, antes de que se promoviera el Route::auth()acceso directo.
Martin Bean
55
si está en laravel 5.5 y superior Auth::routes(['register' => false]);en web.php
Sería conveniente cambiar también la función create () para: lanzar una nueva Excepción ('No es posible el registro');
el JinX
2
o se puede añadir abort(404)enfunction register()
William Notowidagdo
3
No recomendaría este enfoque, ya que sobrecargar el código para eliminar una característica nunca es algo bueno. Simplemente no registre las rutas relacionadas con el registro.
Martin Bean
44
Para Laravel 5.5, pon esto enAuth/RegisterController.php
kapoko
77
En Laravel 5.7 la showRegistrationForm()función está en la vendorcarpeta, técnicamente no se recomienda editar archivos en la carpeta del proveedor. Básicamente, lo que recomiendo es eliminar la ruta de registro web.php. Simplemente puede decir Auth::routes(['register' => false])en el web.phparchivo. ¡Salud!
Ahamed Rasheed
55
Si está utilizando Laravel 5.2 e instaló la funcionalidad relacionada con la autenticación, php artisan make:authentonces su app/Http/routes.phparchivo incluirá todas las rutas relacionadas con la autenticación simplemente llamando Route::auth().
El método auth () se puede encontrar en vendor/laravel/framework/src/Illuminate/Routing/Router.php. Entonces, si desea hacer lo que algunas personas sugieren aquí y deshabilitar el registro eliminando rutas no deseadas (probablemente una buena idea), entonces debe copiar las rutas que aún desea del método auth () y ponerlas en app/Http/routes.php(reemplazar la llamada a Ruta :: auth ()). Entonces, por ejemplo:
<?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');
Si está utilizando una versión inferior a 5.2, entonces probablemente sea diferente, recuerdo que las cosas cambiaron bastante desde 5.0, en algún momento artisan make:authincluso se eliminó IIRC.
En primer lugar, he intentado Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });, pero cuando el usuario ha iniciado sesión solicita /registerque se redirige a/
Sefran2
1
@ Sefran2 Eso se debe a que AuthController llama (a través de otras clases y rasgos, es un poco complicado) el middleware App\Http\Middleware\RedirectIfAuthenticated. Y ese middleware lo redirige a /si ya inició sesión. Lo que tiene sentido, ¿por qué querría registrarse si está conectado? :-) Si desea permitir sólo algunas rutas a algunos tipos de usuarios, que necesita para crear su propio middleware en lugar de['middleware' => 'auth']
Rafał G.
2
Para 5.3 son diferentes una vez más, pero aún se pueden encontrar en vendor / laravel / framework / src / Illuminate / Routing / Router.php
Matthieu
51
Esto puede ser nuevo en 5.7, pero ahora hay una matriz de opciones para el método de autenticación. Simplemente cambiando
Auth::routes();
a
Auth::routes(['register'=>false]);
en su archivo de rutas después de la ejecución php artisan make:authdeshabilitará el registro del usuario.
Nota: para su uso Redirect , no se olvide de que user Redirect;
el acceso del usuario a https: // host_name / register se redirige a "/".
Método 2 para la versión 5.3
Cuando lo usamos php artisan make:authse agrega Auth::route();
automáticamente. Anule la ruta en /routes/web.php. Puedes cambiarlo así: * necesitas comentar esta línea: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');
¡Gracias! Espero que pueda resolver tus problemas.
Agregaría nombres de ruta como se especifica en vendor / laravel / framework / src / Illuminate / Routing / Router.php Route :: get ('login', 'Auth \ LoginController @ showLoginForm') -> name ('login'); Ruta :: post ('login', 'Auth \ LoginController @ login'); Ruta :: post ('cerrar sesión', 'Auth \ LoginController @ logout') -> nombre ('cerrar sesión');
Luciano Fantuzzi
La clase de redireccionamiento se perdió en el primer método, pero cambiar a $this->middleware('auth');- ¡funciona!
Gediminas
12
Sobrescribir getRegister y postRegister es complicado: si está utilizando git, existe una alta posibilidad de que .gitignore de ignorar los archivos de marco, lo que dará como resultado que el registro aún será posible en su entorno de producción (si laravel se instala a través del compositor, por ejemplo )
Otra posibilidad es usar routes.php y agregar esta línea:
Las clases que anulan los métodos del marco no están en el marco (estarían en la carpeta de la aplicación) y serían almacenadas por git. Anular métodos no significa que los cambie en los archivos de marco.
datashaman
11
El AuthController.php@limonte reemplazado está en App\Http\Controllers\Auth, no en el directorio de proveedores, por lo que Git no ignora este cambio.
^ esto. En caso de que estas rutas cambien, simplemente cópielas / péguelas del paquete de rutas Auth ubicado en @ github.com/laravel/framework/blob/… y comente las rutas de registro.
pbond
7
El siguiente método funciona muy bien:
Copie todas las rutas /vendor/laravel/framework/src/Illuminate/Routing/Router.phpy péguelo web.phpy comente o elimine Auth::routes().
Luego configure un condicional para habilitar y deshabilitar el registro desde .env. Duplica el 503.blade.phparchivo views/errorsy crea un 403 prohibido o lo que quieras.
Agregue ALLOW_USER_REGISTRATION=a .env y controle el registro de usuarios estableciendo su valor en verdadero o falso.
Ahora tiene el control total de las rutas y los archivos del proveedor permanecen intactos.
Gracias, sí, esta es una nueva función de versión, puede usar esta función o usar la clase anterior, pero la clase anterior necesita \ antes, quiero decir \ Redirect :: to ('destination');
Milad Rahimi
3
En Laravel 5.4
Puede encontrar todas las rutas registradas Auth::routes()en la clase \Illuminate\Routing\Routeren el métodoauth()
En laravel 5.3, debe anular el valor predeterminado showRegistrationForm()al incluir el siguiente código en el RegisterController.phparchivo enapp\Http\Controllers\Auth
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/publicfunction showRegistrationForm(){//return view('auth.register');
abort(404);//this will throw a page not found exception}
Dado que no desea permitir el registro, es mejor simplemente tirar 404 errorpara que el intruso sepa que está perdido. Y cuando esté listo para registrarse en su aplicación, descomente y //return view('auth.register');luego comenteabort(404);
\\\\\\\\\\\\\\\\\\\\\ SOLO UN FYI /////////////////////////// ////
Si necesita usar autenticación múltiple como crear autenticación para usuarios, miembros, estudiantes, administradores, etc., le aconsejo que revise este hesto / multi-auth, es un paquete increíble para autenticación ilimitada en aplicaciones L5.
Puede leer más sobre la metodología de autenticación y su archivo asociado en este artículo.
También debe parchear la ruta de publicación para evitar el registro del usuario a través de la solicitud de publicación.
Vaishnav Mhetre
2
En Laravel 5.5
Estaba tratando de lograr el mismo problema en Laravel 5.5. En lugar de usar Auth::routes()en el archivo de rutas web.php, solo incluí las rutas de inicio / cierre de sesión:
Esto se ha mencionado en comentarios anteriores, pero me gustaría aclarar que hay varias formas de acceder a las rutas de autenticación en su archivo web.php en Laravel ^ 5.7. dependiendo de su versión, puede parecer un poco diferente, pero logran el mismo resultado.
Para no cambiar demasiado el código tal como está, simplemente cree un middleware para detectar si la url de solicitud es url ('registro'), luego redirija a 404 o haga lo que sea.
publicfunction __construct(){//replace this//$this->middleware('guest');//with this argument.
$this->middleware('auth');}
Sin embargo, podría estar equivocado ... pero parece más hábil que editar la ruta con más líneas y menos timidez que simplemente redirigir la página ... al menos en este caso, querer bloquear el registro para los invitados.
Me gustaría saber si un usuario puede registrarse varias veces con este método. el guestmiddleware es responsable de redirigir a un usuario que ya inició sesión desde una página a la que solo un invitado puede acceder (es decir, una /registerpágina)
Kingsley
0
Supongo que esta sería una mejor solución.
Anule los siguientes métodos como se menciona a continuación en
En Laravel 5.5 es muy simple, si está utilizando el sistema de ruta CRUD.
Ir a app/http/controllers/RegisterController hay espacio de nombres:Illuminate\Foundation\Auth\RegistersUser
Debe ir al RegistersUser: Illuminate\Foundation\Auth\RegistersUser
Hay una llamada al método, showRegistrationFormcambie esto: return view('auth.login');para esto: return redirect()->route('auth.login');y elimine de su página Blade el registro de llamadas de ruta. Puede verse así:
Todo lo que hice fue reemplazar el código de la hoja de registro con el código de la hoja de inicio de sesión. De esa manera, registrarse todavía va a iniciar sesión.
resources/views/auth/register.blade.php se reemplaza con resources/views/auth/login.blade.php
Ahora está anulando esos métodos en función RegistersUser, cada vez que cambie de opinión, elimine estos métodos. También puede comentar los enlaces de registro welcome.blade.phpy las login.blade.phpvistas.
routes.php
. Para habilitar las funciones de autenticación, todo lo que debe hacer es agregarRoute::auth();
al archivo.Route::auth()
acceso directo.Auth::routes(['register' => false]);
en web.phpRespuestas:
Laravel 5.7 introdujo la siguiente funcionalidad:
Las opciones actualmente posibles aquí son:
Para versiones anteriores de Laravel, simplemente anule
showRegistrationForm()
yregister()
métodos enAuthController
para Laravel 5.0 - 5.4Auth/RegisterController.php
para Laravel 5.5fuente
abort(404)
enfunction register()
Auth/RegisterController.php
showRegistrationForm()
función está en lavendor
carpeta, técnicamente no se recomienda editar archivos en la carpeta del proveedor. Básicamente, lo que recomiendo es eliminar la ruta de registroweb.php
. Simplemente puede decirAuth::routes(['register' => false])
en elweb.php
archivo. ¡Salud!Si está utilizando Laravel 5.2 e instaló la funcionalidad relacionada con la autenticación,
php artisan make:auth
entonces suapp/Http/routes.php
archivo incluirá todas las rutas relacionadas con la autenticación simplemente llamandoRoute::auth()
.El método auth () se puede encontrar en
vendor/laravel/framework/src/Illuminate/Routing/Router.php
. Entonces, si desea hacer lo que algunas personas sugieren aquí y deshabilitar el registro eliminando rutas no deseadas (probablemente una buena idea), entonces debe copiar las rutas que aún desea del método auth () y ponerlas enapp/Http/routes.php
(reemplazar la llamada a Ruta :: auth ()). Entonces, por ejemplo:Si está utilizando una versión inferior a 5.2, entonces probablemente sea diferente, recuerdo que las cosas cambiaron bastante desde 5.0, en algún momento
artisan make:auth
incluso se eliminó IIRC.fuente
Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });
, pero cuando el usuario ha iniciado sesión solicita/register
que se redirige a/
App\Http\Middleware\RedirectIfAuthenticated
. Y ese middleware lo redirige a/
si ya inició sesión. Lo que tiene sentido, ¿por qué querría registrarse si está conectado? :-) Si desea permitir sólo algunas rutas a algunos tipos de usuarios, que necesita para crear su propio middleware en lugar de['middleware' => 'auth']
Esto puede ser nuevo en 5.7, pero ahora hay una matriz de opciones para el método de autenticación. Simplemente cambiando
a
en su archivo de rutas después de la ejecución
php artisan make:auth
deshabilitará el registro del usuario.fuente
Para Laravel 5.3 y 5.4, esta es la forma correcta de hacerlo:
Tienes que cambiar:
a
en la aplicación / Http / Controller / Auth / RegisterController.php
fuente
A partir de Laravel 5.7, puede pasar una variedad de opciones a
Auth::routes()
. Luego puede deshabilitar las rutas de registro con:Puede ver cómo funciona esto desde el código fuente: src / Illuminate / Routing / Router.php .
fuente
Método 1 para la versión 5.3
En laravel 5.3 no tengo AuthController. para deshabilitar la ruta de registro debe cambiar en el constructor de
RegisterController
esta manera:Puedes cambiar de forma:
a:
Nota: para su uso
Redirect
, no se olvide de queuser Redirect;
el acceso del usuario a https: // host_name / register se redirige a "/".Método 2 para la versión 5.3
Cuando lo usamos
php artisan make:auth
se agregaAuth::route();
automáticamente. Anule la ruta en /routes/web.php. Puedes cambiarlo así: * necesitas comentar esta línea:Auth::routes();
¡Gracias! Espero que pueda resolver tus problemas.
fuente
$this->middleware('auth');
- ¡funciona!Sobrescribir getRegister y postRegister es complicado: si está utilizando git, existe una alta posibilidad de que
.gitignore
de ignorar los archivos de marco, lo que dará como resultado que el registro aún será posible en su entorno de producción (si laravel se instala a través del compositor, por ejemplo )Otra posibilidad es usar routes.php y agregar esta línea:
De esta manera, los archivos de marco se dejan solos y toda solicitud se redirigirá fuera del módulo de registro de Frameworks.
fuente
El
AuthController.php
@limonte reemplazado está enApp\Http\Controllers\Auth
, no en el directorio de proveedores, por lo que Git no ignora este cambio.He agregado estas funciones:
y funciona correctamente
fuente
LAravel 5.6
fuente
Aquí está mi solución a partir de 5.4:
Tenga en cuenta que he comentado
Auth::routes()
y las dos rutas de registro.Importante: también debe asegurarse de eliminar todas las instancias de
route('register')
suapp.blade
diseño, o Laravel arrojará un error.fuente
El siguiente método funciona muy bien:
Copie todas las rutas
/vendor/laravel/framework/src/Illuminate/Routing/Router.php
y pégueloweb.php
y comente o elimineAuth::routes()
.Luego configure un condicional para habilitar y deshabilitar el registro desde .env. Duplica el
503.blade.php
archivoviews/errors
y crea un 403 prohibido o lo que quieras.Agregue
ALLOW_USER_REGISTRATION=
a .env y controle el registro de usuarios estableciendo su valor en verdadero o falso.Ahora tiene el control total de las rutas y los archivos del proveedor permanecen intactos.
web.php
Esta es una combinación de algunas respuestas anteriores, especialmente Rafal G. y Daniel Centore.
fuente
En laravel 5.6 y superior puedes editar en el archivo web.php
y puedes hacerlo realidad si cambias de opinión, así lo veo fácil
fuente
En
routes.php
, solo agregue lo siguiente:Luego puede controlar selectivamente si el registro está permitido o no en su
.env
archivo.fuente
Tuve que usar:
Usar Redirect :: to () me dio un error:
fuente
En Laravel 5.4
Puede encontrar todas las rutas registradas
Auth::routes()
en la clase\Illuminate\Routing\Router
en el métodoauth()
se parece a esto:
¡Simplemente copie las rutas que desee / necesite y estará bien!
fuente
En laravel 5.3, debe anular el valor predeterminado
showRegistrationForm()
al incluir el siguiente código en elRegisterController.php
archivo enapp\Http\Controllers\Auth
Dado que no desea permitir el registro, es mejor simplemente tirar
404 error
para que el intruso sepa que está perdido. Y cuando esté listo para registrarse en su aplicación, descomente y//return view('auth.register');
luego comenteabort(404);
\\\\\\\\\\\\\\\\\\\\\ SOLO UN FYI /////////////////////////// ////
Si necesita usar autenticación múltiple como crear autenticación para usuarios, miembros, estudiantes, administradores, etc., le aconsejo que revise este hesto / multi-auth, es un paquete increíble para autenticación ilimitada en aplicaciones L5.
Puede leer más sobre la metodología de autenticación y su archivo asociado en este artículo.
fuente
En Laravel 5.5
Estaba tratando de lograr el mismo problema en Laravel 5.5. En lugar de usar
Auth::routes()
en el archivo de rutas web.php, solo incluí las rutas de inicio / cierre de sesión:fuente
Esto se ha mencionado en comentarios anteriores, pero me gustaría aclarar que hay varias formas de acceder a las rutas de autenticación en su archivo web.php en Laravel ^ 5.7. dependiendo de su versión, puede parecer un poco diferente, pero logran el mismo resultado.
Primera opción
Segunda opción
fuente
fuente
Para no cambiar demasiado el código tal como está, simplemente cree un middleware para detectar si la url de solicitud es url ('registro'), luego redirija a 404 o haga lo que sea.
fuente
En Laravel 5.5
Trabajar en un problema similar y configurar el argumento de middleware de invitado a 'auth' parecía una solución más elegante.
Editar archivo: app-> http-> Controllers-> Auth-> RegisterController.php
Sin embargo, podría estar equivocado ... pero parece más hábil que editar la ruta con más líneas y menos timidez que simplemente redirigir la página ... al menos en este caso, querer bloquear el registro para los invitados.
fuente
guest
middleware es responsable de redirigir a un usuario que ya inició sesión desde una página a la que solo un invitado puede acceder (es decir, una/register
página)Supongo que esta sería una mejor solución.
Anule los siguientes métodos como se menciona a continuación en
App \ Http \ Controller \ Auth \ RegisterController.php
fuente
En Laravel 5.5 es muy simple, si está utilizando el sistema de ruta CRUD.
Ir a
app/http/controllers/RegisterController
hay espacio de nombres:Illuminate\Foundation\Auth\RegistersUser
Debe ir al RegistersUser:
Illuminate\Foundation\Auth\RegistersUser
Hay una llamada al método,
showRegistrationForm
cambie esto:return view('auth.login');
para esto:return redirect()->route('auth.login');
y elimine de su página Blade el registro de llamadas de ruta. Puede verse así:fuente
¡Encontré que esta es la solución más fácil en laravel 5.6! Redirige a cualquiera que intente ir a yoursite.com/register a yoursite.com
rutas / web.php
fuente
Todo lo que hice fue reemplazar el código de la hoja de registro con el código de la hoja de inicio de sesión. De esa manera, registrarse todavía va a iniciar sesión.
resources/views/auth/register.blade.php
se reemplaza conresources/views/auth/login.blade.php
fuente
Para Laravel 5.6+, pegue los siguientes métodos en
app\Http\Controller\Auth\RegisterController
Ahora está anulando esos métodos en función
RegistersUser
, cada vez que cambie de opinión, elimine estos métodos. También puede comentar los enlaces de registrowelcome.blade.php
y laslogin.blade.php
vistas.fuente
añadir
en la parte superior del archivo
fuente