Checkpoint: Implémentation de la cohabitation des deux systèmes d'authentification (OAuth Manus et authentification locale). Les utilisateurs peuvent maintenant choisir entre :

- Authentification locale avec email/mot de passe
- OAuth Manus pour les utilisateurs de la plateforme

Le contexte tRPC gère automatiquement les deux types de tokens (JWT local et JWT OAuth).
This commit is contained in:
Manus Sandbox
2025-11-19 07:03:34 -05:00
parent a1d67c7451
commit 42826fc7dd
9 changed files with 940 additions and 10 deletions

View File

@@ -1,8 +1,9 @@
import type { CreateExpressContextOptions } from "@trpc/server/adapters/express";
import type { User } from "../../drizzle/schema";
import { verifyToken } from "./auth";
import { getUserById } from "../db";
import { getUserById, getUserByOpenId } from "../db";
import { COOKIE_NAME } from "@shared/const";
import { sdk } from "./sdk";
export type TrpcContext = {
req: CreateExpressContextOptions["req"];
@@ -28,12 +29,18 @@ export async function createContext(
}
if (token) {
// Vérifier et décoder le token
const decoded = verifyToken(token);
if (decoded) {
// Récupérer l'utilisateur depuis la base de données
user = await getUserById(decoded.userId) || null;
// Essayer d'abord l'authentification locale (JWT avec userId)
try {
const decoded = verifyToken(token);
if (decoded && decoded.userId) {
user = await getUserById(decoded.userId) || null;
}
} catch (localAuthError) {
// Si l'authentification locale échoue, essayer OAuth
const session = await sdk.verifySession(token);
if (session && session.openId) {
user = await getUserByOpenId(session.openId) || null;
}
}
}
} catch (error) {