Busca de sessão no Laravel com Sanctum
[Finalizado Pelo Aluno]
![Alef Silva](https://storage.googleapis.com/eti-academy/users/alef-silva.jpg)
Estou tendo problemas em obter os dados da sessão utilizando API com Sanctum.
A minha aplicação é multi-tenancy single-database e tem a parte web e API. Tenho um listener registrado em EventServiceProvider dentro de protected $listen que utiliza Illuminate\Auth\Events\Login
Listener abaixo:
O grande problema disso é que ao buscar os dados da sessão com dd(session()); na parte web em qualquer tela, os dados são retornados corretamente com 'user_id' e 'tenant_id'. Porém na parte de API com Sanctum, os dados da sessão aparecem somente no método de login e quando eu tento buscar a sessão em outros métodos mesmo passando o Bearer: token que foi gerado, não vem 'user_id' e 'tenan_id' habilitado.
Isso tem a ver com a forma que o Sanctum trabalha com sessões? será que eu devo manter a lógica do listener somente para web e criar outra lógica separada para API ao inserir 'tenant_id' e 'user_id' ?
Olá, Alef!
Tudo bem?
O protocolo http não armazena estado, logo, não é possível trabalhar com sessão em uma api rest (http).
No caso da API, vc quer pegar o usuário autenticado, certo?
Não muda em nada, uma vez que tem o middewlare (auth:sanctum) aplicado, você pode recuperar o usuário de todoas as formas como recupera em uma autenticação web (com sessão), exemplo:
dd(auth()->user());
![Carlos Ferreira](https://storage.googleapis.com/eti-academy/users/carlos-ferreira.jpg)
É que no caso eu preciso setar o user_id e tenant_id em operações de gravar registros, exemplo: ao criar um pedido de compra, será necessário gravar o usuário que fez esse registro e o tenant que ele pertence automaticamente para que seja filtrado coisas somente desse usuário e não de outros tenants com o uso do Global Scope como você ensinou no curso. Para isso eu criei um observer conforme abaixo:
Esse observer funciona em tudo da parte web, mas na API não funciona por conta do HTTP não armazenar estado conforme você explicou...
Ao invés de usar o helper session() devo utilizar algo como: auth()->user()->id e auth()->user()->tenant_id? é isso?
![Alef Silva](https://storage.googleapis.com/eti-academy/users/alef-silva.jpg)
Eu tenho um projeto multi-tenancy com api.
Esquece a ideia de sessão, pega o usuário e seus dados através do helper auth, ou da facede Auth, api não armazena estado.
Se precisa de algo que não esteja no model do usuário, vc precisa passar na request
![Carlos Ferreira](https://storage.googleapis.com/eti-academy/users/carlos-ferreira.jpg)
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!