Sobre outra forma de conexão do banco de dados
Carlos,
A conexão ao banco se da primeiramente pelo domínio.
exemplo :
xxx.aplicacao.com.br
onde pego o domínio xxx, pesquiso no banco master
e lá pego o nome do banco , então faço uma nova conexão com esse banco.
Minha dúvida é:
Ao invés de setar o banco pelo nome do domínio, eu gostaria
de ter um dominio fixo para a aplicação, e na tela de login
eu teria mais um campo : ID, e-mail e senha,
onde o campo ID serviria para setar o banco, nesse caso eu poderia
usar uma variável de sessão para salvar o "xxx" ?
Faltou continuar a request, caso já tenha alternado a conexão e existir a sessão:
if (session()->has('tenant')) {
// [...]
return $next($request);
}
Carlos,
Fia a alteração, mas continuou dando loop,
atualizei no git
Quais são os logs?
--
Na dúvida, não sofra, copia os TenantMiddleware do curso, que no seu caso muda apenas a questão da sessão, que é como usou para identificar o tenant (no curso usamos a URL).
Carlos,
Tentei aqui mas não deu certo. você quer que eu grave um vídeo?,
não teria como tu testar ai ? (https://github.com/elasawilmar7/teste),
public function handle($request, Closure $next)
{
$manager = app(ManagerTenant::class);
if ($manager->domainIsMain()) {
return $next($request);
}
$cliente = $this->getCliente($request->getHost());
if (!$cliente && $request->url() != route('404.tenant')) {
return redirect()->route('404.tenant');
} else if ($request->url() != route('404.tenant') && !$manager->domainIsMain()) {
$manager->setConnection($cliente);
$manager->setFileSystems($cliente);
}
return $next($request);
}
Sim, pode gravar o vídeo, com os logs;
--
Faltou vc adaptar para o seu caso.
Esse código aqui por exemplo, não precisa:
if ($manager->domainIsMain()) [...]
Essa forma de pegar o tenant, também não precisa:
$cliente = $this->getCliente($request->getHost());
(No seu caso, pega da sessão)
Carlos,
segue o vídeo
https://drive.google.com/file/d/13LhbhG4txoNAjPnnDxn97n3ykxhDJN9J/view
No seu caso, ficou duas sessões ativas, porque você se autenticou 2x;
--
O que está pegando agora é uma questão de ajudar a lógica dos middlewares;
--
O seu middleware auth, precisa ser registrado depois do middleware Tenant, voltamos aquele caso, onde eu te disse, que o Middleware TenantMiddleware precisa ser registrado como global, assim como foi no curso.
Mas, no seu caso ainda tem questões de sessões, como resolver?
Conforme mencionei antes, precisa dar start nas sessões, logo precisa passar o middleware StartSession para global também (antes do middleware TenantMiddleware).
--
Na linha 18, deve ficar o seu middleware StartSession, e na linha seguinte o middleware TenantMiddleware:
https://github.com/elasawilmar7/teste/blob/main/app/Http/Kernel.php#L18
Carlos,
"Na linha 18, deve ficar o seu middleware StartSession, e na linha seguinte o middleware TenantMiddleware:
https://github.com/elasawilmar7/teste/blob/main/app/Http/Kernel.php#L18"
ja fiz, atualizei o git
No codigo no TenantMiddle esta ok?
Sim, está correto.
Essa lógica aqui está errada:
https://github.com/elasawilmar7/teste/blob/main/app/Http/Middleware/Tenant/TenantMiddleware.php#L26
Se existir a sessão de tenant, e estiver na rota de login -> continue
--
Valida comigo, só para te ajudar a chegar na solução do seu case.
Você tem duas sessões, certo?
auth default
sessão de tenant
e o usuário pode se logar nativamente, ou usando um id do tenant, isso mesmo?
Carlos,
"e o usuário pode se logar nativamente, ou usando um id do tenant, isso mesmo?"
Não , o objetivo é o usuário se logar somente pelo (ID, email e senha)
No TenantMiddleware fiz assim , pelo seu comentário , mas não deu certo nem entrou no IF
Nessa lógica que você persistiu o mesmo erro de lógica:
Ficou assim, lendo a lógica implementada: se existir a sessão tenant (ok) E estiver na rota de login E estiver autenticado no banco principal -> continua (return $next($request);)
--
if (session()->has('tenant') && !$currentRouteName == 'login') {
// muda a conexão
// next request
} else if (!session()->has('tenant') && !$currentRouteName == 'login') {
return redirect('/login');
}
Carlos,
o código que vc mandou no post anterior não entrava no segundo IF, coloquei uns logs
mas não passava , então fiz uma substituição nos dois Ifs por: (Ai deu certo !!!!!!!!!!!!!!!!!!!!!)
Que bom que você conseguiu, meus parabéns!
Carlos,
segue a dúvida
https://drive.google.com/file/d/1Q76tNEdcr7imKpWArS42gcrlvRE0pu0S/view?usp=sharing
Olá, Wilmar!
Como vai?
Essa thread aqui já ficou longa demais, se não se importar, cria uma nova thread (ticket), COM BASTANTE detalhes do problema.
No aguardo!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!