feat: integrate Better Auth and enhance authentication flow
- Added Better Auth integration to the web application, allowing for dual login support with both custom and Better Auth systems. - Updated authentication client configuration to dynamically set the base URL based on the environment. - Enhanced chat components to utilize user authentication status, improving user experience and security. - Refactored various components to support Better Auth, including error handling and user identity management. - Improved notification handling and user feedback mechanisms during authentication processes.
This commit is contained in:
64
apps/web/src/lib/stores/convexAuth.ts
Normal file
64
apps/web/src/lib/stores/convexAuth.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* Helper para garantir que o token seja passado para todas requisições Convex
|
||||
*
|
||||
* Este store reativa garante que quando o token mudar no authStore,
|
||||
* todos os clientes Convex sejam atualizados automaticamente.
|
||||
*/
|
||||
|
||||
import { authStore } from "./auth.svelte";
|
||||
import { browser } from "$app/environment";
|
||||
import { PUBLIC_CONVEX_URL } from "$env/static/public";
|
||||
|
||||
let convexClients = new Set<any>();
|
||||
|
||||
/**
|
||||
* Registrar um cliente Convex para receber atualizações de token
|
||||
*/
|
||||
export function registerConvexClient(client: any) {
|
||||
if (!browser) return;
|
||||
|
||||
convexClients.add(client);
|
||||
|
||||
// Configurar token inicial
|
||||
if (authStore.token && client.setAuth) {
|
||||
client.setAuth(authStore.token);
|
||||
}
|
||||
|
||||
// Retornar função de limpeza
|
||||
return () => {
|
||||
convexClients.delete(client);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Atualizar token em todos clientes registrados
|
||||
*/
|
||||
function updateAllClients() {
|
||||
if (!browser) return;
|
||||
|
||||
const token = authStore.token;
|
||||
convexClients.forEach((client) => {
|
||||
if (client && typeof client.setAuth === "function") {
|
||||
if (token) {
|
||||
client.setAuth(token);
|
||||
} else {
|
||||
client.clearAuth?.();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Observar mudanças no token e atualizar clientes
|
||||
if (browser) {
|
||||
// Usar uma abordagem reativa simples
|
||||
let lastToken: string | null = null;
|
||||
|
||||
setInterval(() => {
|
||||
const currentToken = authStore.token;
|
||||
if (currentToken !== lastToken) {
|
||||
lastToken = currentToken;
|
||||
updateAllClients();
|
||||
}
|
||||
}, 500); // Verificar a cada 500ms
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user