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

[Dúvida] Usuário loga apenas uma vez

Tava seguindo a aula sobre criar a autenticação - este aqui - porém me deparei com um problema...

Eu consigo criar o usuário normalmente no meu banco de dados, e lá ele é gravado com email, senha e um nome.

A senha é hasheada normalmente, porém depois de ele se logar automaticamente na primeira vez, eu não consigo mais logar se eu fiz logout.

Model User.php

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'adminNome',
        'email',
        'senha',
    ];
   ...
    protected $table = 'admins';
    protected $primaryKey = 'adminID';
}

LoginController.php

public function index()
    {
        return view('login.index');
    }
    public function registrar()
    {
        return view('login.registrar');
    }

    public function checarUsuario(Request $request)
    {
        if(!Auth::attempt($request->only(['email', 'senha']))){
            return redirect()->back()->withErrors('Usuário ou senha inválidos.');
        };

        return to_route('raiz');
    }

    public function novoUsuario(Request $request)
    {
        $campos = $request->except(['_token']);
        $campos['senha'] = Hash::make($campos['senha']);

        $usuario = User::create($campos);
        Auth::login($usuario);

        return to_route('raiz');
    }

    public function logout()
    {
        Auth::logout();

        return to_route('login');
    }

LoginRotas.php

Route::get('/login',[LoginController::class,'index'])->name('login');
Route::get('/logout',[LoginController::class,'logout'])->name('logout');
Route::get('/registrar',[LoginController::class,'registrar'])->name('registrar');
Route::get('/recuperar-senha',[LoginController::class,'index'])->name('recuperar-senha');

Route::post('/login',[LoginController::class,'checarUsuario'])->name('checarUsuario');
Route::post('/registrar',[LoginController::class,'novoUsuario'])->name('novoUsuario');

Já dei uma pequena pesquisada na internet, e pode ser que minha senha tenha sido hasheada 2 vezes na hora da criação do usuário, por isso ela para de funcionar, porém, não encontrei uma solução.

O git do projeto é esse.

5 respostas

Oii, Elisame! Tudo bem?

Desculpa pela demora para te responder.

Pude perceber que finalizou o curso de Laravel: transações, service container e autenticação, é muito legal ver que conseguiu encontrar uma solução para o problema!

Recomendo, caso se sinta confortável em compartilhar seu conhecimento, interagir com outros estudantes, trocar experiências e fazer networking, que participe do Discord oficial da Alura de alunas e alunos:

Continue se dedicando aos estudos e qualquer dúvida, conte conosco.

Bons estudos, Elisame!

Então, o problema é que minha dúvida não foi respondida rs...

solução!

Oii, Elisame! Tudo bem?

Peço desculpas por não ser assertiva em minha resposta anterior.

Isso pode ter ocorrido, pois no Laravel, o campo de senha é esperado como password e não como senha. O Laravel possui uma sensibilidade em termos de sintaxe, caso detecte algo um impedimento é retornado.

Como sugestão, troque o campo senha para password, no modelo User, no método checarUsuario e novoUsuario, para que o Laravel entenda o que fazer no código.

Espero que dê certo! Lembre-se de fazer as alterações necessárias no seu banco de dados também, renomeando a coluna senha para password e revisar se houve a troca em todos os campos necessários.

Espero ter ajudado. Qualquer dúvida, conte conosco.

Bons estudos!

Funcionou corretamente agora!

Vou fazer a alteração na migration também.

Uma última dúvida, não teria como eu usar o campo com nome diferente de password no Laravel, ou ele é nesse caso "engessado"?

Oii, Elisame! Tudo bem?

Oba, fico feliz que tenha dado certo!

Tem como personalizar, porém, pode deixar o seu código mais complexo. O que pode ser ruim quando mais de um desenvolvedor trabalha no projeto, pois deixa ela o menos previsível e mais vulnerável a erros.

Para personalizar, é preciso modificar o modelo de usuário e o controlador de autenticação para informar ao Laravel o nome do campo que você está usando para as senhas. Além disso, atualize os nomes de campos em outros lugares que também interage com as senhas.

Deixo abaixo, como apoio, a documentação do Laravel que aborda o ponto de Autenticação:

Caso a página apareça em inglês e você não se sinta confortável com o idioma, clique com o botão direito do mouse em qualquer canto da página e escolha a opção "Traduzir para o português".

Espero ter esclarecido sua dúvida.

Bons estudos, Elisame!