[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
JEAN MAX GUEZZO
Criador JEAN MAX GUEZZO 08/04/2022

Olá boa tarde!

A minha aplicação ela funciona hj com banco de dados mysq com autenticação via sanctum e se tiver apenas um banco de dados ela funciona normal.

Eu quero tornar ela em mult-tenancy.

Eu consegui fazer a troca do banco de dados normal de acordo com o curso de mult-tenancy que tem aqui na especializaTi porem quando eu faço a autenticação ele nao altoriza me retorna o erro 401.

eu preciso fazer uma aplicação que acessa por um lugar central e diferencia os tenants atravez do cnpj.

 

classe ManagerTenant

<?php

namespace App\Tenant;

use App\Models\Company;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class ManagerTenant {

public static function setConnection(Company $company){
DB::purge('tenant');

Config::set('database.connections.tenant.host', $company['db_hostname']);
Config::set('database.connections.tenant.database', $company['db_database']);
Config::set('database.connections.tenant.username', $company['db_username']);
Config::set('database.connections.tenant.password', $company['db_password']);

DB::setDefaultConnection('tenant'); configuração atual que consegui fazer a conexão com o banco;

DB::reconnect('->reconnect()')// nao funcionou ele sempre tentava buscar do meu banco de dados central
    \DB::reconnect('->reconnect()')// nao funcionou tbm ele sempre tentava buscar do meu banco de dados central

Schema::connection('tenant')->getConnection()->reconnect();

}
}

classe LoginController
class LoginController extends Controller
{

public function showLoginForm()
{
return view('auth.login');
}


public function login(Request $request){
$company = Company::where('cnpj', $request['cnpj'])->first();
ManagerTenant::setConnection($company);

$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);


if (Auth::attempt($credentials)) { //aqui ele passa normal
       $request->session()->regenerate(); // se eu dou um dd nessa $request ela me retorna true

return redirect()->intended('admin/home'); mas ao retornar esse redirect ele me retrona um erro 401 e nao deixa eu acessar a
a minha aplicação
}

E se eu remover o banco de dados central e conectar diretamente no banco que tem as informações da minha aplicação ele autentica
normalmente.

return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}

 

 

alguem poderia me ajudar e fazer essa conexão multu-tenancy com autenticação sanctum.

Manager Carlos Ferreira 08/04/2022

Olá, Jean!
Tudo bem?

Tem o seu código no GitHub?
Quero entender melhor a dinâmica dele.

A autenticação é unicamente através de API com o Sanctum?
Não precisa trabalhar com sessão, porque o protocolo http não armazena estado.

Carlos Ferreira
Criador JEAN MAX GUEZZO 08/04/2022

Olá carlos bom dia!

Me desculpe a demora para dar um retorno, mas eu consegui uma alternativa.

realmente nao precisei trabalhar com a sessao, eu estava tentando trabalhar tudo em uma aplicação laravel, mas depois eu separei os dois.

e a minha solução foi:

deixei a parte da api em uma aplicação e fiz no estilo que vc fez na api no curso da plataforma de ead no laravel e juntei com o curso de multi-tenancy.

e o front eu fiz em vuejs.

e a identificação da base de dados eu utilizei o proprio token gerado pelo sanctum.

e funcionou perfeito..

eu gosto muito dos seus cursos, sao sempre bem explicado e com uma metodologia muito top....

Parabéns pelo seu trabalho.... 

muito obrigado pela atenção..

 

att. jean max

JEAN MAX GUEZZO
Manager Carlos Ferreira 08/04/2022

Show de bola amigo, parabéns!

Obrigado pelo feedback, gratidão.

Precisando de mim, pode contar comigo. TMJ!

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!