Oi pessoal, tudo bom?
Meu stack está um pouco diferente do curso, mas não foge ao assunto.
Stack de desenvolvimento:
- Laravel
- DoctrineORM
- Autenticação LDAP
Pois bem, por se tratar de uma autenticação LDAP, meu processo de auth é um pouco diferente. Eu não uso o Auth::attempt, por exemplo.
No meu controller de Login eu faço o seguinte:
public function auth(LoginRequest $request)
{
$auth = Adldap::auth()->attempt($request->user.env('LDAP_USER_SUFIX'), $request->password, true);
if($auth){
$userData = Ldap::ldapUserAttributes($request->user);
$user = new User($userData['name'], $userData['mail']);
Auth::login($user);
return redirect()->route('dashboard');
}
return redirect()->back()->withErrors('Usuário e/ou senha incorretos');
}
O User aqui é uma classe que implementa o Authenticatable, mas não é nenhuma representação de entidade de banco de dados. Uso apenas para criar um objeto e guardá-lo na sessão.
Minhas rotas são como se seguem:
Route::get ('/login', [Login::class, 'index']) ->name('login');
Route::post('/login', [Login::class, 'auth']) ->name('auth');
Route::middleware([ 'auth'])->group(function () {
Route::get('/dashboard', [Dashboard::class, 'index'])->name('dashboard');
});
Assim, se eu salvar em Log ou imprimir na tela o que está em Auth::user() logo após o Auth::login($user);
me é apresentado os dados do usuário que realizou o login. Entretanto, ao fazer o teste na aplicação, após eu realizar o login, a página de login me era apresentada novamente. Então percebi que o usuário não estava ficando salvo na sessão (no Auth).
Para testar isso, removi o middleware de auth da rota /dashboard e verifiquei verifiquei o que estava chegando no Auth::user() lá. O que me é apresentado é NULL.
Ou seja, no momento do login, o Auth::user() existe, mas após o redirect, fica sendo NULL, aparentemente é algo com a sessão.
Fiz um teste para verificar se dados de sessão estão sendo guardados. No login, antes do redirect, salvei na sessão um dado e tentei recuperá-lo na rota /dashboard, o que ocorreu perfeitamente.
Não sei o que está acontecendo com o Auth::login($user) para que a sessão não seja guardada. O que posso fazer?
Abaixo está o código da classe User
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\Authenticatable;
class User implements Authenticatable
{
private $cpf;
private $username;
private $email;
private $senha;
private $remember_token;
public function __construct(string $cpf, string $username, string $email)
{
$this->cpf = $cpf;
$this->username = $username;
$this->email = $email;
}
public function getUsername()
{
return $this->username;
}
public function getEmail()
{
return $this->email;
}
public function getCpf()
{
return $this->cpf;
}
public function getAuthIdentifierName()
{
return $this->username;
}
public function getAuthIdentifier()
{
return $this->cpf;
}
public function getAuthPassword()
{
return $this->senha;
}
public function getRememberToken()
{
return $this->remember_token;
}
public function setRememberToken($value)
{
$this->remember_token = $value;
}
public function getRememberTokenName()
{
return $this->remember_token;
}
}
Observação: Senha e Remember_token eu não uso na aplicação, apenas inseri para implementar o Autenticatable