feat: Improve OAuth handling and user data extraction in authentication flow

This commit is contained in:
M1ngdaXie
2026-01-08 16:35:38 -08:00
parent 0a5e6661f1
commit 6ba18854bf
5 changed files with 205 additions and 178 deletions

View File

@@ -4,12 +4,15 @@ import { API_BASE_URL, authFetch } from './client';
export const authApi = {
getCurrentUser: async (): Promise<User> => {
const response = await authFetch(`${API_BASE_URL}/auth/me`);
console.log("current user is " + response)
if (!response.ok) {
throw new Error('Failed to get current user');
}
return response.json();
const data = await response.json();
console.log("current user data:", data);
// Backend returns { user: {...} }, extract the user object
return data.user;
},
logout: async (): Promise<void> => {

View File

@@ -27,17 +27,25 @@ export const useYjsDocument = (documentId: string, shareToken?: string) => {
const initializeDocument = async () => {
// For share token access, use placeholder user info
const authUser = user || {
// Extract user data (handle both direct user object and nested structure for backwards compat)
const realUser = user || {
id: "anonymous",
name: "Anonymous User",
email: "",
avatar_url: undefined,
};
const realUser = user?.user ? user.user : user || {};
const currentName = realUser.name || realUser.email || "Anonymous";
const currentId = realUser.id;
const currentAvatar = realUser.avatar_url || realUser.avatar;
console.log("✅ [Fixed] User Name is:", currentName);
console.log("🔍 [Debug] Initializing Awareness with User:", authUser); // <--- 添加这行
const currentName = realUser.name || realUser.email || "Anonymous";
const currentAvatar = realUser.avatar_url;
console.log("🔍 [Debug] User data for awareness:", {
id: currentId,
name: currentName,
email: realUser.email,
avatar: currentAvatar,
rawUser: realUser,
});
const authToken = token || "";
console.log("authToken is " + token);
@@ -55,8 +63,8 @@ export const useYjsDocument = (documentId: string, shareToken?: string) => {
}
console.log(
"🔍 [Debug] Full authUser object:",
JSON.stringify(authUser, null, 2)
"🔍 [Debug] Full user object:",
JSON.stringify(realUser, null, 2)
);
// Set user info for awareness with authenticated user data
yjsProviders.awareness.setLocalStateField("user", {
@@ -124,8 +132,8 @@ export const useYjsDocument = (documentId: string, shareToken?: string) => {
);
// Log local user info
console.log(`[Awareness] Local user initialized: ${authUser.name}`, {
color: getColorFromUserId(authUser.id),
console.log(`[Awareness] Local user initialized: ${currentName}`, {
color: getColorFromUserId(currentId),
clientId: yjsProviders.awareness.clientID,
});

View File

@@ -15,9 +15,10 @@ const Home = () => {
const loadDocuments = async () => {
try {
const { documents } = await documentsApi.list();
setDocuments(documents);
setDocuments(documents || []);
} catch (error) {
console.error("Failed to load documents:", error);
setDocuments([]); // Set empty array on error to prevent null access
} finally {
setLoading(false);
}