[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Wilmar Lima da Silva
Criador Wilmar Lima da Silva 03/11/2022

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" ?

Manager Carlos Ferreira 03/11/2022

Faltou continuar a request, caso já tenha alternado a conexão e existir a sessão:
if (session()->has('tenant')) {
    // [...]
    return $next($request);
}

Carlos Ferreira
Criador Wilmar Lima da Silva 03/11/2022

Carlos,

Fia a alteração, mas continuou dando loop,

atualizei no git

Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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 Ferreira
Criador Wilmar Lima da Silva 03/11/2022

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);

    }

Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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 Ferreira
Criador Wilmar Lima da Silva 03/11/2022

Carlos, 

segue o vídeo

https://drive.google.com/file/d/13LhbhG4txoNAjPnnDxn97n3ykxhDJN9J/view

Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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 Ferreira
Criador Wilmar Lima da Silva 03/11/2022

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?

 

Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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 Ferreira
Criador Wilmar Lima da Silva 03/11/2022

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

if (session()->has('tenant') && $currentRouteName == 'login' && Auth::check()) {
            $manager = app(ManagerTenant::class);
            $cliente = session()->get('tenant');

            Log::info('re conectar ' . $currentRouteName);
            $manager->setConnection($cliente);
            $manager->setFileSystems($cliente);

            return $next($request);
        }
Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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 Ferreira
Criador Wilmar Lima da Silva 03/11/2022

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 !!!!!!!!!!!!!!!!!!!!!)

if (session()->has('tenant') && $currentRouteName != 'login') {
            $manager = app(ManagerTenant::class);
            $cliente = session()->get('tenant');

            Log::info('re conectar ' . $currentRouteName);
            $manager->setConnection($cliente);
            $manager->setFileSystems($cliente);

            return $next($request);
        } else if (!session()->has('tenant') && $currentRouteName != 'login') {
            Log::info('Vai pra login');
            return redirect('/login');
        }
Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

Que bom que você conseguiu, meus parabéns!

Carlos Ferreira
Criador Wilmar Lima da Silva 03/11/2022

Carlos,

segue a dúvida

https://drive.google.com/file/d/1Q76tNEdcr7imKpWArS42gcrlvRE0pu0S/view?usp=sharing

Wilmar Lima da Silva
Manager Carlos Ferreira 03/11/2022

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!

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!