Apenas remova os métodos relacionados ao registro do seu arquivo routes.php . Não substitua os métodos por métodos em branco - é uma abordagem horrível e invasiva, pois você precisará adicionar novamente os corpos se decidir reativar esse recurso no futuro.
Martin Bean
1
@MartinBean não há rotas routes.php. Para habilitar as funções de autenticação, tudo o que você faz é adicionar Route::auth();ao arquivo.
Miken32
@ miken32 Meu comentário foi de mais de cinco meses atrás, antes que o Route::auth()atalho fosse defendido.
Martin Bean
5
se você estiver em laravel 5.5 e acima Auth::routes(['register' => false]);no web.php
Manojkiran.A
Respostas:
234
O Laravel 5.7 introduziu a seguinte funcionalidade:
Pode ser aconselhável alterar também a função create () para: lançar nova exceção ('Registro não possível');
o JinX 13/04
2
ou você pode adicionar abort(404)emfunction register()
William Notowidagdo
3
Eu não defenderia essa abordagem, pois sobrecarregar o código para remover um recurso nunca é uma coisa boa. Apenas não registre as rotas relacionadas ao registro.
Martin Bean
4
Para o Laravel 5.5, coloque isso emAuth/RegisterController.php
kapoko
7
No Laravel 5.7, a showRegistrationForm()função está na vendorpasta, tecnicamente não é recomendável editar arquivos na pasta do fornecedor. Basicamente, o que eu recomendo é remover a rota de registro web.php. Você pode simplesmente dizer Auth::routes(['register' => false])em web.phparquivo. Felicidades!
Ahamed Rasheed
55
Se você estiver usando o Laravel 5.2 e tiver instalado a funcionalidade relacionada à autenticação php artisan make:auth, seu app/Http/routes.phparquivo incluirá todas as rotas relacionadas à autenticação simplesmente chamando Route::auth().
O método auth () pode ser encontrado em vendor/laravel/framework/src/Illuminate/Routing/Router.php. Portanto, se você quiser fazer o que algumas pessoas sugerem aqui e desativar o registro removendo rotas indesejadas (provavelmente uma boa ideia), copie as rotas que ainda deseja do método auth () e coloque-as app/Http/routes.php(substituindo a chamada para Route :: auth ()). Então, por exemplo:
<?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');
Se você estiver usando a versão inferior à 5.2, provavelmente é diferente, lembro que as coisas mudaram bastante desde o 5.0, em algum momento artisan make:authfoi até removido o IIRC.
Primeiro de tudo, eu tentei Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });, mas quando o usuário conectado solicita /registerque ele é redirecionado para/
Sefran2
1
@ Sefran2 Isso ocorre porque o AuthController chama (por outras classes e características, é um pouco complicado) o middleware App\Http\Middleware\RedirectIfAuthenticated. E esse middleware o redireciona para /se você já estiver logado. O que faz sentido, por que você deseja se registrar se estiver logado? :-) Se você quiser permitir que apenas algumas rotas para alguns tipos de usuários, você precisa criar o seu próprio middleware, em vez de['middleware' => 'auth']
Rafał G.
2
Para o 5.3, eles são diferentes mais uma vez, mas ainda podem ser encontrados em vendor / laravel / framework / src / Illuminate / Routing / Router.php
Matthieu
51
Isso pode ser novo na versão 5.7, mas agora existe uma matriz de opções para o método auth. Simplesmente mudando
Auth::routes();
para
Auth::routes(['register'=>false]);
no arquivo de rotas após a execução php artisan make:authdesabilitará o registro do usuário.
Nota: para uso Redirect , não esqueça de user Redirect;
acessar o usuário para https: // host_name / register, ele é redirecionado para "/".
Método 2 para versão 5.3
Quando usamos php artisan make:auth, é adicionado Auth::route();
automaticamente. Substitua a rota em /routes/web.php. Você pode mudar assim: * você precisa comentar esta linha: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');
Obrigado! Espero que possa resolver seus problemas.
Eu adicionaria nomes de rota como especificado em vendor / laravel / framework / src / Illuminate / Routing / Router.php Route :: get ('login', 'Auth \ LoginController @ showLoginForm') -> name ('login'); Route :: post ('login', 'Auth \ LoginController @ login'); Route :: post ('logout', 'Auth \ LoginController @ logout') -> nome ('logout');
Luciano Fantuzzi
Classe de redirecionamento perdida no primeiro método, mas mudar para $this->middleware('auth');- funciona!
Gediminas
12
Substituir o getRegister e o postRegister é complicado - se você estiver usando o git, existe uma grande possibilidade .gitignorede ignorar arquivos de estrutura, o que levará ao resultado de que o registro ainda será possível no seu ambiente de produção (se o laravel estiver instalado via compositor, por exemplo )
Outra possibilidade é usar o routes.php e adicionar esta linha:
Dessa forma, os arquivos da estrutura são deixados em paz e qualquer solicitação ainda será redirecionada para fora do módulo de registro das estruturas.
As classes que substituem os métodos da estrutura não estão na estrutura (elas estariam na pasta do aplicativo) e seriam armazenadas pelo git. Substituir métodos não significa que você os altera nos arquivos da estrutura.
Datashaman
11
O AuthController.php@limonte substituído está dentro App\Http\Controllers\Auth, não no diretório do fornecedor, portanto o Git não ignora essa alteração.
^ isso. Caso essas rotas mudem, simplesmente copie / cole-as no pacote de rotas Auth localizado em github.com/laravel/framework/blob/… e comente as rotas de registro.
pbond
7
O método a seguir funciona muito bem:
Copie todas as rotas /vendor/laravel/framework/src/Illuminate/Routing/Router.phpe cole-as web.phpe comente ou exclua Auth::routes().
Em seguida, configure um condicional para ativar e desativar o registro de .env. Duplique o 503.blade.phparquivo views/errorse crie um 403 proibido ou o que você quiser.
Adicione ALLOW_USER_REGISTRATION=a .env e controle o registro do usuário, definindo seu valor como verdadeiro ou falso.
Agora você tem controle total das rotas e os arquivos do fornecedor permanecem intocados.
Obrigado, sim, este é o novo recurso de versão, você pode usar esta função ou usar a classe anterior, mas a classe anterior precisa \ antes dela, quero dizer \ Redirect :: to ('destination');
Milad Rahimi
3
No Laravel 5.4
Você pode encontrar todas as rotas registradas Auth::routes()na classe \Illuminate\Routing\Routerno métodoauth()
No laravel 5.3, você deve substituir o padrão showRegistrationForm()incluindo o código abaixo no RegisterController.phparquivo emapp\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}
como você não deseja permitir o registro, é melhor jogar apenas 404 errorpara que o invasor saiba que está perdido. E quando estiver pronto para o registro em seu aplicativo, remova o //return view('auth.register');comentário e comenteabort(404);
\\\\\\\\\\\\\\\\\\\\ APENAS UMA FYI /////////////////////////// ////
Se você precisar usar autenticação múltipla, como criar autenticação para usuários, membros, estudantes, administrador, etc., aconselho que você faça o checkout deste hesto / multi-auth, um pacote incrível para autenticação ilimitada em aplicativos L5.
Você pode ler mais sobre a metodologia Auth e seu arquivo associado neste artigo.
Você também precisa corrigir a rota de postagem para evitar o registro do usuário através da solicitação de postagem.
Vaishnav Mhetre
2
No Laravel 5.5
Eu estava tentando realizar o mesmo problema no Laravel 5.5. Em vez de usar Auth::routes()no arquivo de rotas web.php, incluí apenas as rotas de logon / logout:
Isso foi mencionado em comentários anteriores, mas gostaria de esclarecer que existem várias maneiras de acessar as rotas de autenticação no seu arquivo web.php no Laravel ^ 5.7. dependendo da sua versão, pode parecer um pouco diferente, mas eles alcançam o mesmo resultado.
Para não mudar muito o código, basta criar um middleware para detectar se o URL da solicitação é url ('register'), depois redirecione para 404 ou faça o que for.
publicfunction __construct(){//replace this//$this->middleware('guest');//with this argument.
$this->middleware('auth');}
No entanto, posso estar errado ... mas parece mais liso do que editar o roteamento com mais linhas e menos timidez do que simplesmente redirecionar a página ... pelo menos nesse caso, querendo bloquear o registro dos convidados.
Eu ficaria curioso para saber se um usuário pode se registrar várias vezes usando esse método. o guestmiddleware é redirecionamento responsável um já sessão iniciada fora de uma página que apenas um acesso hóspedes podem (ou seja, uma /registerpágina)
Kingsley
0
Acho que essa seria uma solução melhor.
Substitua os seguintes métodos, conforme mencionado abaixo em
No Laravel 5.5, é muito simples se você estiver usando o sistema de rotas CRUD.
Vá para app/http/controllers/RegisterController há espaço para nome:Illuminate\Foundation\Auth\RegistersUser
Você precisa ir para o RegistersUser: Illuminate\Foundation\Auth\RegistersUser
Existe a chamada de método showRegistrationFormchange this: return view('auth.login');for this: return redirect()->route('auth.login');e remova do seu registro de chamadas de rota de página blade. Pode ser assim:
Agora você está substituindo esses métodos na RegistersUsercaracterística, sempre que mudar de idéia, remova esses métodos. Você também pode comentar os links welcome.blade.phpe login.blade.phpvisualizações do registro .
routes.php
. Para habilitar as funções de autenticação, tudo o que você faz é adicionarRoute::auth();
ao arquivo.Route::auth()
atalho fosse defendido.Auth::routes(['register' => false]);
no web.phpRespostas:
O Laravel 5.7 introduziu a seguinte funcionalidade:
As opções atualmente possíveis aqui são:
Para versões mais antigas Laravel apenas substituir
showRegistrationForm()
eregister()
métodosAuthController
para o Laravel 5.0 - 5.4Auth/RegisterController.php
para o Laravel 5.5fonte
abort(404)
emfunction register()
Auth/RegisterController.php
showRegistrationForm()
função está navendor
pasta, tecnicamente não é recomendável editar arquivos na pasta do fornecedor. Basicamente, o que eu recomendo é remover a rota de registroweb.php
. Você pode simplesmente dizerAuth::routes(['register' => false])
emweb.php
arquivo. Felicidades!Se você estiver usando o Laravel 5.2 e tiver instalado a funcionalidade relacionada à autenticação
php artisan make:auth
, seuapp/Http/routes.php
arquivo incluirá todas as rotas relacionadas à autenticação simplesmente chamandoRoute::auth()
.O método auth () pode ser encontrado em
vendor/laravel/framework/src/Illuminate/Routing/Router.php
. Portanto, se você quiser fazer o que algumas pessoas sugerem aqui e desativar o registro removendo rotas indesejadas (provavelmente uma boa ideia), copie as rotas que ainda deseja do método auth () e coloque-asapp/Http/routes.php
(substituindo a chamada para Route :: auth ()). Então, por exemplo:Se você estiver usando a versão inferior à 5.2, provavelmente é diferente, lembro que as coisas mudaram bastante desde o 5.0, em algum momento
artisan make:auth
foi até removido o IIRC.fonte
Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });
, mas quando o usuário conectado solicita/register
que ele é redirecionado para/
App\Http\Middleware\RedirectIfAuthenticated
. E esse middleware o redireciona para/
se você já estiver logado. O que faz sentido, por que você deseja se registrar se estiver logado? :-) Se você quiser permitir que apenas algumas rotas para alguns tipos de usuários, você precisa criar o seu próprio middleware, em vez de['middleware' => 'auth']
Isso pode ser novo na versão 5.7, mas agora existe uma matriz de opções para o método auth. Simplesmente mudando
para
no arquivo de rotas após a execução
php artisan make:auth
desabilitará o registro do usuário.fonte
Para o Laravel 5.3 e 5.4, aqui está a maneira correta de fazer isso:
Você precisa mudar:
para
em app / Http / Controller / Auth / RegisterController.php
fonte
No Laravel 5.7, você pode passar uma variedade de opções para
Auth::routes()
. Você pode desativar as rotas de registro com:Você pode ver como isso funciona no código-fonte: src / Illuminate / Routing / Router.php .
fonte
Método 1 para versão 5.3
No laravel 5.3, não há AuthController. Para desativar a rota de registro, você deve alterar o construtor da
RegisterController
seguinte forma:Você pode alterar a forma:
para:
Nota: para uso
Redirect
, não esqueça deuser Redirect;
acessar o usuário para https: // host_name / register, ele é redirecionado para "/".Método 2 para versão 5.3
Quando usamos
php artisan make:auth
, é adicionadoAuth::route();
automaticamente. Substitua a rota em /routes/web.php. Você pode mudar assim: * você precisa comentar esta linha:Auth::routes();
Obrigado! Espero que possa resolver seus problemas.
fonte
$this->middleware('auth');
- funciona!Substituir o getRegister e o postRegister é complicado - se você estiver usando o git, existe uma grande possibilidade
.gitignore
de ignorar arquivos de estrutura, o que levará ao resultado de que o registro ainda será possível no seu ambiente de produção (se o laravel estiver instalado via compositor, por exemplo )Outra possibilidade é usar o routes.php e adicionar esta linha:
Dessa forma, os arquivos da estrutura são deixados em paz e qualquer solicitação ainda será redirecionada para fora do módulo de registro das estruturas.
fonte
O
AuthController.php
@limonte substituído está dentroApp\Http\Controllers\Auth
, não no diretório do fornecedor, portanto o Git não ignora essa alteração.Eu adicionei estas funções:
e funciona corretamente.
fonte
LAravel 5.6
fonte
Heres minha solução a partir da versão 5.4:
Observe que comentei
Auth::routes()
e as duas rotas de registro.Importante: você também deve remover todas as instâncias do
route('register')
seuapp.blade
layout, ou o Laravel lançará um erro.fonte
O método a seguir funciona muito bem:
Copie todas as rotas
/vendor/laravel/framework/src/Illuminate/Routing/Router.php
e cole-asweb.php
e comente ou excluaAuth::routes()
.Em seguida, configure um condicional para ativar e desativar o registro de .env. Duplique o
503.blade.php
arquivoviews/errors
e crie um 403 proibido ou o que você quiser.Adicione
ALLOW_USER_REGISTRATION=
a .env e controle o registro do usuário, definindo seu valor como verdadeiro ou falso.Agora você tem controle total das rotas e os arquivos do fornecedor permanecem intocados.
web.php
Esta é uma combinação de algumas respostas anteriores, especialmente Rafal G. e Daniel Centore.
fonte
No laravel 5.6 e acima, você pode editar no arquivo web.php
e você pode torná-lo realidade, se mudar de idéia, acho fácil assim
fonte
Em
routes.php
, basta adicionar o seguinte:Em seguida, você pode controlar seletivamente se o registro é permitido ou não no seu
.env
arquivo.fonte
Eu tive que usar:
Usar Redirect :: to () me deu um erro:
fonte
No Laravel 5.4
Você pode encontrar todas as rotas registradas
Auth::routes()
na classe\Illuminate\Routing\Router
no métodoauth()
Se parece com isso:
Basta copiar as rotas que você deseja / precisa e você está bem!
fonte
No laravel 5.3, você deve substituir o padrão
showRegistrationForm()
incluindo o código abaixo noRegisterController.php
arquivo emapp\Http\Controllers\Auth
como você não deseja permitir o registro, é melhor jogar apenas
404 error
para que o invasor saiba que está perdido. E quando estiver pronto para o registro em seu aplicativo, remova o//return view('auth.register');
comentário e comenteabort(404);
\\\\\\\\\\\\\\\\\\\\ APENAS UMA FYI /////////////////////////// ////
Se você precisar usar autenticação múltipla, como criar autenticação para usuários, membros, estudantes, administrador, etc., aconselho que você faça o checkout deste hesto / multi-auth, um pacote incrível para autenticação ilimitada em aplicativos L5.
Você pode ler mais sobre a metodologia Auth e seu arquivo associado neste artigo.
fonte
No Laravel 5.5
Eu estava tentando realizar o mesmo problema no Laravel 5.5. Em vez de usar
Auth::routes()
no arquivo de rotas web.php, incluí apenas as rotas de logon / logout:fonte
Isso foi mencionado em comentários anteriores, mas gostaria de esclarecer que existem várias maneiras de acessar as rotas de autenticação no seu arquivo web.php no Laravel ^ 5.7. dependendo da sua versão, pode parecer um pouco diferente, mas eles alcançam o mesmo resultado.
Primeira opção
Segunda opçao
fonte
fonte
Para não mudar muito o código, basta criar um middleware para detectar se o URL da solicitação é url ('register'), depois redirecione para 404 ou faça o que for.
fonte
No Laravel 5.5
Trabalhar em um problema semelhante e definir o argumento do middleware de convidado para 'auth' parecia uma solução mais elegante.
Editar arquivo: app-> http-> Controladores-> Auth-> RegisterController.php
No entanto, posso estar errado ... mas parece mais liso do que editar o roteamento com mais linhas e menos timidez do que simplesmente redirecionar a página ... pelo menos nesse caso, querendo bloquear o registro dos convidados.
fonte
guest
middleware é redirecionamento responsável um já sessão iniciada fora de uma página que apenas um acesso hóspedes podem (ou seja, uma/register
página)Acho que essa seria uma solução melhor.
Substitua os seguintes métodos, conforme mencionado abaixo em
App \ Http \ Controller \ Auth \ RegisterController.php
fonte
No Laravel 5.5, é muito simples se você estiver usando o sistema de rotas CRUD.
Vá para
app/http/controllers/RegisterController
há espaço para nome:Illuminate\Foundation\Auth\RegistersUser
Você precisa ir para o RegistersUser:
Illuminate\Foundation\Auth\RegistersUser
Existe a chamada de método
showRegistrationForm
change this:return view('auth.login');
for this:return redirect()->route('auth.login');
e remova do seu registro de chamadas de rota de página blade. Pode ser assim:fonte
Achei que essa era a solução mais fácil no laravel 5.6! Ele redireciona qualquer pessoa que tenta ir para yoursite.com/register para yoursite.com
rotas / web.php
fonte
Tudo o que fiz foi substituir o código do blade de registro pelo código do blade de login. Dessa forma, o registro ainda vai para o login.
resources/views/auth/register.blade.php
é substituído porresources/views/auth/login.blade.php
fonte
Para o Laravel 5.6+, cole os métodos abaixo em
app\Http\Controller\Auth\RegisterController
Agora você está substituindo esses métodos na
RegistersUser
característica, sempre que mudar de idéia, remova esses métodos. Você também pode comentar os linkswelcome.blade.php
elogin.blade.php
visualizações do registro .fonte
adicionar
na parte superior do arquivo
fonte