laravel 5.3 new Auth :: routes ()

128

Recentemente, comecei a usar o laravel 5.3 para escrever um blog, mas tenho uma pergunta após a execução php artisan make:auth

quando eu executo isso, ele gera rotas no meu web.php

este é o código:

Auth::routes();

Route::get('/home', 'HomeController@index');

Então eu corro php artisan route:list , encontro muitas ações, como LoginController @ login ...

Mas não encontrei essas ações no meu App\Http\Controllers\Auth , onde estão?

E também qual é o Auth::routes() significado, não consigo encontrar as rotas sobre o Auth.

Preciso de ajuda de alguém, obrigado a responder minha pergunta

g1eny0ung
fonte
10
Eu sou o único que agora odeia todas aquelas magias do Laravel?
Muhammad Usman
1
Eu não me importo com as magias de laravel, se elas fossem documentadas ... e funcionassem de forma consistente, sem ter que andar por aí pelo servidor enquanto entoavam artesãos php ... o que?
baradhili
Tudo o que o Laravel não é para desenvolvedores, é para empresas e usuários iniciantes que desejam abrir novos aplicativos de maneira rápida e fácil, até mesmo a documentação deles. Eu ainda preferiria o Codeigniter se tivesse uma escolha.
BlackPanther 13/02/19
Leia este guia: medium.com/@panjeh/…
panjeh

Respostas:

214

Auth::routes()é apenas uma classe auxiliar que ajuda a gerar todas as rotas necessárias para a autenticação do usuário. Você pode procurar o código aqui https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php .

Aqui estão as rotas

// 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');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
Lee
fonte
2
Obrigado! Eu vejo o ../Routing/Router.php e agora sei como funcionam as rotas. Mas onde está o método estático do Auth rotas ()? Eu ainda não consigo encontrá-lo, me perdoe Eu sou um novato laravel ...
g1eny0ung
4
O método Auth :: routes está aqui github.com/laravel/framework/blob/5.3/src/Illuminate/Support/… e está chamando a função Router de qualquer maneira. Marque isso como resposta, se isso o ajudou, obrigado.
Lee
2
Authé uma fachada e será definida em config/app.phpVocê encontrará a classe que atua como seu provedor nesse arquivo de configuração.
Jason
Tem o mesmo erro NotFoundHttpException in RouteCollection.php line 161:, mas está recebendo:, e outra API está funcionando bem.
151291 26/1018
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');Não é possível executar a AuthAPI
151291 26/10
51

Aqui estão o Laravel 5.7 , o Laravel 5.8 , o Laravel 6.0 e o Laravel 7.0 (observe uma pequena alteração bc no 6.0 da rota de verificação de email).

// 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')->name('password.update');

// Confirm Password (added in v6.2)
Route::get('password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm');
Route::post('password/confirm', 'Auth\ConfirmPasswordController@confirm');

// Email Verification Routes...
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify'); // v6.x
/* Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify'); // v5.x */
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

Você pode verificar estas rotas aqui:

zyglobe
fonte
1
De fato, houve uma pequena alteração de 5.8 para 6.x, como mostram os links: O caminho para o link de verificação de e-mail deve ser 'email/verify/{id}/{hash}'. Caso contrário, o hash não poderá ser verificado e será gerado um erro 403 dizendo "Esta ação não é autorizada".
debite 15/09/19
46

Rotas de autenticação para o Laravel 5.3, em vez de Auth :: routes (). Espero que ajude...

Route::group(['middleware' => ['web']], function() {

// Login Routes...
    Route::get('login', ['as' => 'login', 'uses' => 'Auth\LoginController@showLoginForm']);
    Route::post('login', ['as' => 'login.post', 'uses' => 'Auth\LoginController@login']);
    Route::post('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// Registration Routes...
    Route::get('register', ['as' => 'register', 'uses' => 'Auth\RegisterController@showRegistrationForm']);
    Route::post('register', ['as' => 'register.post', 'uses' => 'Auth\RegisterController@register']);

// Password Reset Routes...
    Route::get('password/reset', ['as' => 'password.reset', 'uses' => 'Auth\ForgotPasswordController@showLinkRequestForm']);
    Route::post('password/email', ['as' => 'password.email', 'uses' => 'Auth\ForgotPasswordController@sendResetLinkEmail']);
    Route::get('password/reset/{token}', ['as' => 'password.reset.token', 'uses' => 'Auth\ResetPasswordController@showResetForm']);
    Route::post('password/reset', ['as' => 'password.reset.post', 'uses' => 'Auth\ResetPasswordController@reset']);
});

Portanto, se você alterar alguns nomes dessas rotas, lembre-se de alterar também as visualizações das ações das postagens!

Walter Pozzguo
fonte
Obrigado, mas você não precisa 'middleware' => ['web'] devido a: fora da caixa, o grupo de middleware da web é automaticamente aplicado ao seu arquivo routes / web.php pelo RouteServiceProvider.
panjeh
15

Para o Laravel 5.5.x

// 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');
Farid Movsumov
fonte
8

ordem de chamada da função:

  1. Rotas Illuminate \ Support \ Facades \ Auth @ ( https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php )
  2. (App) Iluminar \ Fundação \ Aplicativo @ auth
  3. (Rota) Iluminar \ Roteamento \ Roteador

é rota assim:

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\AuthController@showLoginForm');
    $this->post('login', 'Auth\AuthController@login');
    $this->get('logout', 'Auth\AuthController@logout');
    // Registration Routes...
    $this->get('register', 'Auth\AuthController@showRegistrationForm');
    $this->post('register', 'Auth\AuthController@register');
    // Password Reset Routes...
    $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
    $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
    $this->post('password/reset', 'Auth\PasswordController@reset');
}
SilentCat
fonte
Essa resposta realmente lança luz sobre a pergunta feita pelo OP. Obrigado @SilentCat.
Valentine Shi
Eu pensei que seria bom explicar verbalmente o que acontece nessas 3 etapas acima: Auth::routes()- a fachada Auth - recupera a Routerinstância do objeto do contêiner do Laravel e chama seu método pré-existente auth. authpor sua vez, define as rotas e seus respectivos controladores que foram gerados por php artisan make:auth. É isso.
Valentine Shi
7

Isso funcionou para mim com o Laravel 5.6 .

No arquivo web.php, basta substituir:

Auth::routes();

De:

//Auth::routes();
// Authentication Routes...
Route::get('admin/login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('admin/login', 'Auth\LoginController@login');
Route::post('admin/logout', 'Auth\LoginController@logout')->name('logout');
// 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');

E remova o link Register nos dois arquivos abaixo:

welcome.blade.php
layouts/app.blade.php
DevonDahon
fonte
4

Se você está pesquisando essas mesmas rotas para a versão laravel 7, encontrará aqui Vendor/laravel/ui/src/AuthRouteMethods.php

kunal rajput
fonte
1

Estou surpreso que ninguém tenha mencionado o comando php artisan route:list, que fornece uma lista de todas as rotas de aplicativos registradas (incluindo Auth::routes()e Passport::routes()se registradas)

Shay
fonte
0

a classe loginuser usa uma característica chamada AuthenticatesUsers

se você abrir essa característica, verá as funções (isso se aplica a outros controladores) Illuminate\Foundation\Auth\AuthenticatesUsers;

aqui está o código de característica https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

desculpe pelo formato ruim, estou usando meu telefone

também Auth::routes()chama apenas uma função que retorna as rotas de autenticação que é isso (eu acho)

Achraf Khouadja
fonte
Sim, eu olho através do Auth / dir, mas não encontrei o método, como App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm, onde posso encontrar o método após @, custei muito tempo para encontrá-lo, mas agora Eu também não consigo encontrar it..I sou novo para laravel ..
g1eny0ung
1
aqui é o caminho completo vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords, se você quer mudar este ou algo assim, a mudança não faça isso, basta adicionar o mesmo método para controlador ur e depois alterá-lo,
Achraf Khouadja
@Achraf Khouadja, parece que você domina o laravel. Eu preciso de sua ajuda. Veja aqui: stackoverflow.com/questions/41047583/…
moses toh