Carlos Alexandre Gomes
Criador Carlos Alexandre Gomes 17/11/2021

Ola, estou com uma duvida.

Tentei aplicar esta implementação da aula

Aula: 08 - Login Único no Laravel 8

em uma api com sanctum, mas não esta dando certo

depois de autenticado pela Api quando tento acessar qualquer rota protegida pelo middleware : auth:sanctum estou recebendo este erro :
"message": "Method Illuminate\\Auth\\RequestGuard::viaRemember does not exist.",

existe alguma forma de contonar isso ou não é possivvel usar esta feature :

Auth::logoutOtherDevices()

no sanctum?

Obrigado!

Manager Carlos Ferreira 17/11/2021

Olá, Carlos!
Tudo bem?

Esse logout usa sessão para controlar a autenticação, e autenticação de APIs (uma caracteristica do protocolo http) não armazena estado (não guarda sessão)

---

Agora, como o Sanctum trabalha com tokens, é bem fácil resolver isso.

Como?
Basta deletar os outros tokens do usuário, pimba!

public function auth(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
        'device_name' => 'required',
    ]);

    $user = User::where('email', $request->email)->first();

    if (! $user || ! Hash::check($request->password, $user->password)) {
        throw ValidationException::withMessages([
            'email' => ['The provided credentials are incorrect.'],
        ]);
    }

    // Deleta os outros tokens do usuário
    $user->tokens()->delete();

    return response()->json([
        'token' => $user->createToken($request->device_name)->plainTextToken
    ], 201);
}

Carlos Ferreira
Criador Carlos Alexandre Gomes 17/11/2021

Obrigado, pela resposta, vou testar aqui!

Carlos Alexandre Gomes
Criador Carlos Alexandre Gomes 17/11/2021

Boa tarde, existe algum maneira de escultar o evento de login feito sanctum, estou tentando gerar um log de acessos do usuario pela Api porem não consigo saber qual evento escultar para pegar esta informação.

Carlos Alexandre Gomes
Manager Carlos Ferreira 17/11/2021

Você até pode disparar um evento no auth que criamos, de forma manual;

Mas, você também usar os eventos de default de autenticação do Laravel, vai funcionar da mesma forma.

https://laravel.com/docs/8.x/authentication#events

Se tiver alguma dúvida de como implementar, me retorna que te ajudo. Beleza?

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!