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

Criador Wilmar Lima da Silva 03/11/2022

Nesse ponto te enviei em formato zap , algumas pastas

pra vc analisar o projeto, então vc pediu pra acessar a minha maquina nessa semana.

com as modificações que fizemos , após o acesso com login e senha, a 

aplicação esta retornando para a tela de login, depois da mudança de banco de dados.

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

Fala Wilmar!

Como enviou apenas partes do projeto, zipadas, isso dificulta muito o suporte.

A sua dúvida tem o caráter bem pessoal, mas ainda sim vou te ajudar, sem custos.

Assim que possível, combinamos o acesso e tento te ajudar.

Enquanto isso, vai exercitando as suas habilidades, tente resolve o problema de forma ativa.

Até breve, no e-mail! ;-)

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

segue o projeto no github como vc solicitou,

https://github.com/elasawilmar7/teste.git

na pasta "/public/images/" , tem os scripts dos 2 bancos de dados e o arquivo .Env

O erro que esta dando é quando passa pelo LoginController, faz a mudança de banco e autenticação, mas

esta retornando para a tela de login, ao inves, de seguir para a aplicação

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

Olá, Wilmar!

Boa, já clonei o projeto aqui para testar, pode deixar como privado, se quiser.

Assim que possível, já rodo aqui e vejo para você qual é o problema;

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

Carlos, 

deu certo ver o projeto

https://github.com/elasawilmar7/teste.git ?

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

Seu projeto está atualizado no GitHub?
Pergunto, porque não encontrei nenhum outro controller além do Home e dos de autenticação.

--

Vamos por partes:

1) Aqui, está recuperando o client pelo seu database:
https://github.com/elasawilmar7/teste/blob/main/app/Http/Controllers/Auth/LoginController.php#L48

É importante verificar se não o encontrou, porque isso pode gerar uma exception para você:
if (!$cliente) {
    return redirect()->back()->with('message', 'Cliente não encontrado');
}

--

Após o login, você chegou a criar a sessão do usuário? Onde você travou?

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

Carlos, 

atualizei LoginController no git,

Como faço "você chegou a criar a sessão do usuário?" ?

 

 

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

Exatamente igual te passei no exemplo do dia "
10/11/2022", assim:
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    session()->put('tenant', $cliente);

    // [...]
}

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

Carlos, já atualizei o git e a aplicação com  "session()->put('tenant', $cliente);",

mas em que momento vou usar essa sessão? Nesse projeto não existe TentantMidlleware.

Você chegou a baixar o projeto e testar ?

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

Vamos um passo a passo, vai ser melhor assim, porque você mesmo consegue resolver este problema, melhor que ganhar a formula mágica.

--

Agora que criou a sessão, o seu próximo passo é criar o TentantMidlleware, assim como fizemos no curso, justamente para pegar o valor da sessão e mudar o banco de dados de forma dinâmica.

Quando fizer isso, me diga! :-)

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

Carlos,

atualizei o git.

criei o Middleware, então

lá no middleware fiz uma checagem se a sessão criada no LoginController existia, mas

não passou pelo IF.

 

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

Neste caso, como a sessão não existe, é porque não passou ainda pelo seu processo de autenticação.

Próximo passo: Você pode fazer o redirect para login, caso não exista a sessão.

--

O que está usando para armazenar as sessões? Redis?

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

Carlos,

sobre "O que está usando para armazenar as sessões? Redis?"

não sei te dizer, eu uso o Laragon e habilitei o Redis, mas pra trabalhar no outro projeto

com real time (socket.io).

 

 

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

Carlos,

Vi aqui no confg\session.php

'driver' => env('SESSION_DRIVER', 'file'),

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

A sessão é definida de acordo com a variável de ambiente definida no arquivo .env, chamada: SESSION_DRIVER

Provavelmente está com o valor default, file

--

Chegou a fazer o próximo passo? O if no middleware para redirecionar para login, caso ainda não tenha a sessão de tenant.

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

Carlos, 

antes de fazer o proximo passo, fiz um teste.

coloquei o Log::info no TenantMiddleware e no LoginController (veja no git), então o arquivo laravel-2023-01-03.log, 

me retornou assim : 

 

[2023-01-03 21:19:43] local.INFO: array (

)  

[2023-01-03 21:20:09] local.INFO: array (

)  

[2023-01-03 21:20:26] local.INFO: array (

)  

[2023-01-03 21:20:26] local.INFO: array (

  '_token' => 'T3yfgfwISBpxzmXAGG7nB7cRFm2fjlqT5V5cFuup',

  '_flash' => 

  array (

    'old' => 

    array (

    ),

    'new' => 

    array (

    ),

  ),

  '_previous' => 

  array (

    'url' => 'http://teste.test/login',

  ),

  'login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d' => 618,

  'tenant' => 

  App\Models\Cliente::__set_state(array(

     'fillable' => 

    array (

      0 => 'name',

      1 => 'domain',

      2 => 'bd_database',

      3 => 'bd_hostname',

      4 => 'bd_username',

      5 => 'bd_password',

    ),

     'connection' => 'tenant',

     'table' => 'clientes',

     'primaryKey' => 'id',

     'keyType' => 'int',

     'incrementing' => true,

     'with' => 

    array (

    ),

     'withCount' => 

    array (

    ),

     'perPage' => 15,

     'exists' => true,

     'wasRecentlyCreated' => false,

     'attributes' => 

    array (

      'id' => 7,

      'uuid' => 'bddb2cd8-e094-11ea-957f-d09466a24655',

      'name' => 'BEE liga',

      'domain' => 'ufa.upmaster-em.test',

      'bd_database' => 'ufa-em',

      'bd_hostname' => 'localhost',

      'bd_username' => 'root',

      'bd_password' => '1234',

      'created_at' => '2020-08-31 11:20:03',

      'updated_at' => '2020-08-17 11:20:03',

    ),

     'original' => 

    array (

      'id' => 7,

      'uuid' => 'bddb2cd8-e094-11ea-957f-d09466a24655',

      'name' => 'BEE liga',

      'domain' => 'ufa.upmaster-em.test',

      'bd_database' => 'ufa-em',

      'bd_hostname' => 'localhost',

      'bd_username' => 'root',

      'bd_password' => '1234',

      'created_at' => '2020-08-31 11:20:03',

      'updated_at' => '2020-08-17 11:20:03',

    ),

     'changes' => 

    array (

    ),

     'casts' => 

    array (

    ),

     'dates' => 

    array (

    ),

     'dateFormat' => NULL,

     'appends' => 

    array (

    ),

     'dispatchesEvents' => 

    array (

    ),

     'observables' => 

    array (

    ),

     'relations' => 

    array (

    ),

     'touches' => 

    array (

    ),

     'timestamps' => true,

     'hidden' => 

    array (

    ),

     'visible' => 

    array (

    ),

     'guarded' => 

    array (

      0 => '*',

    ),

  )),

  'url' => 

  array (

    'intended' => 'http://teste.test/home',

  ),

)  

[2023-01-03 21:20:26] local.INFO: array (

)  

[2023-01-03 21:20:27] local.INFO: array (

)  

 

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

O seu log é de todas as sessões, o que você precisa focar é na sessão de tenant, essa sim.

$currentRouteName = Route::currentRouteName();
if (!session()->has('tenant') && $currentRouteName != 'login') {
    return redirect()->name('login');
}
// https://laravel.com/docs/9.x/routing#accessing-the-current-route

Neste exemplo, se não existir a sessão, vai redirecionar para login (caso já não esteja em login - isso evita um loop infinito de redirect)

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

Carlos, 

atualizei o git,

tive que fazer algums mudanças:

substituir para  "$currentRouteName = $request->path();"  , pq o outro estava devolvendo sempre NULL.

substituir para "return redirect()->route('login');" , pq o outro dava erro (esse projeto foi criado com Laravel 5.7)

e agora como fica ? 

 

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

Legal. Agora me diga como ficou o funcionamentoo, quando faz o login, está conseguindo nevagar para as demais páginas do sistema?
Se sim, é porque está tudo ok (pelo menos no tocante, criação da sessão)

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

Carlos,

testando aqui,

quando eu acesso a aplicação (http://teste.test) vai para a tela de login direto, 

após o acesso , retorna pra tela de login novamente, não vai para home.

Wilmar Lima da Silva
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!