Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Auth no Laravel 5.5

Pessoal,

Vi que existem muitas diferenças da nova versão do 5.5 do Laravel e a versão atual do curso. Estou com alguns problemas e não sei direito como resolver.

Segundo o curso o arquivo de rotas já é diferente da nova versão. Eu não tive problema pra resolver isso. Percebi que o arquivo em questão é o routes/web.php.

O conteúdo desse arquivo é diferente do dado no curso, pois no web.php não estão presentes as linhas dadas no curso:

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

Route::resources([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController'
]);

Adicionei essas linhas no web.php, mas sabendo que nenhum desses Controllers existem.

Adicionado a isso percebi que eu não tinha na nova versão o aquivo de Controller para o Home.

Sendo assim e entrei aqui no Fórum e pesquisei alguns tópicos que abordam essa questão. Percebi então que eu poderia rodar o:

php artisan make:auth

A partir de agora eu tenho sim o HomeController. Foram adicionados no web.php:

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

Mas os outros controles da pasta Auth ainda não foram criados. E deveriam? Parece que não.

Ao tentar fazer um registro de usuário eu recebi um erro de inifite loop. Alterei o web.php para receber as rotas antigas (e comentando a rota Auth::routes(), fucionou). Mas ao tentar clicar em logout, recebo a mensagem:

Class estoque\Http\Controllers\Auth\AuthController does not exist

Eu vou continuar batendo a cabeça aqui pois é assim que aprendo! Mas como não domino o Laravel, por favor, alguém, da Alura, coloquem uma descrição mais precisa sobre o processo de autenticação para a nova versão do Laravel.

Por favor! Muito obrigado.

8 respostas

Os controllers deveriam estar sim na pasta auth. São 4 ao todo, dentro da pasta app/Http/Controllers/Auth/:

  • ForgotPasswordController.php
  • LoginController.php
  • RegisterController.php
  • ResetPasswordController.php

Veja aqui https://github.com/laravel/laravel/tree/master/app/Http/Controllers/Auth

Ou faça uma instalação nova em outra pasta usando o L5.5: laravel new Estoque

Ok. Esses controllers estão sim lá, mas eu não me referia a eles. O erro indica que a classe AuthController não existe!!

Dá uma conferida no namespace deles: namespace App\Http\Controllers\Auth;

Estão todos corretos. Mas desde que o erro acontece ao clicar no logout, e a rota não está registrada, existe uma rota automática para logout?

O link direciona para /auth/logout.

Execute o php artisan route:list. No meu L55 aqui a rota logout é um POST. Na minha instalação eu uso o botão logout dentro de um <form>:

<form action="{{ route('logout') }}" method="POST">
    {{ csrf_field() }}
    <button type="submit" class="button">Sair</button>
</form>

Ou tente adicionar no routes: Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\AuthController@getLogout');

+--------+-----------+---------------------------------------------------+-----------------------------------------+------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                                               | Name                                    | Action                                                                 | Middleware   |
+--------+-----------+---------------------------------------------------+-----------------------------------------+------------------------------------------------------------------------+--------------+
|        | POST      | logout                                            | logout                                  | App\Http\Controllers\Auth\LoginController@logout                       | web          |

Bom meu amigo, muito grato pela sua ajuda! Estamos quase lá! Mas apesar de estar quase lá, ainda careço de entendimento do que está acontecendo. Pq tá uma salada!!! rs

Meu web.php ficou assim:

Route::get('/', 'ProdutoController@lista');

Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/json', 'ProdutoController@listaJson');
Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra')->where('id', '[0-9]+');
Route::get('/produtos/remove/{id}', 'ProdutoController@remove')->where('id', '[0-9]+');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::post('/produtos/adiciona', 'ProdutoController@adiciona');

/*Route::resources([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController'
]);
*/
Auth::routes();

Route::get('logout', 'Auth\LoginController@logout');

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

O logout passou a funcionar! Mas ainda não entendo completamente como as coisas funcionam. Estou utilizando os Controllers de dentro da pasta Auth.

O LoginController que está sendo dado no curso é diferente desse! Bom... vamos ver se conseguimos receber da Alura uma explicação melhor do processo completo de autenticação na nova versão!

Se vc tiver algum tutorial bom eu agradeço!

Muito grato!

solução!

O seu web.php parece correto. Aquele Route::get que te mostrei é opcional, apenas pra fazer funcionar link direto, ou você precisaria usar o <form> mesmo.

O curso aborda Laravel 5.0, que foi lançado em fevereiro de 2015, não é mais suportado pelo próprio developer. Além disso, Auth não parece fazer parte do escopo do curso (não tem aula sobre isso ou usando essa facade). Ou seja, eu não esperaria um update da equipe Alura.

Como vc está começando no Laravel, eu faria uma das coisas:

  • concentrar em fazer o curso do jeito que está, usando a versão 5.0 que está nas aulas, depois se preocupar com versão mais nova (que tem algumas diferenças mas nada tão profundo assim), ou;
  • me parece que vc quer fechar o acesso a algumas funcionalidades do sistema de estoque, então procurou o Auth. Ok, então procure também sobre Auth middleware e proteja algumas Route com ele. https://laravel.com/docs/5.5/middleware Vai dar o resultado esperado sem te complicar demais.

Exemplo direto do meu routes/web:

Auth::routes();
Route::resource('usuarios', 'UsuarioController')->middleware('auth:web');
Route::resource('artigos', 'ArtigoController')->middleware(['auth:web', 'editor:web']);

Outra dica: use uma IDE https://www.jetbrains.com/phpstorm

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software