This commit is contained in:
xuqssq
2024-12-28 15:39:48 +08:00
parent b3ac241354
commit 6e8334ecaf
18 changed files with 5017 additions and 420 deletions

View File

@@ -2,6 +2,8 @@ import React, { createContext, useContext, useState, useEffect } from "react";
import { supabase } from "@/config/supabase";
import { message } from "antd";
import { useNavigate, useSearchParams, useLocation } from "react-router-dom";
import { supabaseService } from "@/hooks/supabaseService";
import { v4 as uuidv4 } from "uuid";
const AuthContext = createContext({});
@@ -9,7 +11,7 @@ export const AuthProvider = ({ children }) => {
const [searchParams, setSearchParams] = useSearchParams();
const navigate = useNavigate();
const location = useLocation();
const [user, setUser] = useState(null);
const [user, setUser] = useState({});
const [loading, setLoading] = useState(true);
useEffect(() => {
@@ -37,7 +39,9 @@ export const AuthProvider = ({ children }) => {
data: { session },
error,
} = await supabase.auth.getSession();
setUser(session?.user ?? null);
const role = await checkInTeam(session?.user ?? null);
setUser({ ...session?.user, adminRole: role });
} catch (error) {
console.error("Error getting session:", error);
} finally {
@@ -46,17 +50,6 @@ export const AuthProvider = ({ children }) => {
};
initSession();
// 订阅认证状态变化
const {
data: { subscription },
} = supabase.auth.onAuthStateChange((_event, session) => {
setUser(session?.user ?? null);
});
return () => {
subscription?.unsubscribe();
};
}, []);
// useEffect(() => {
@@ -66,6 +59,45 @@ export const AuthProvider = ({ children }) => {
// }
// }, [location.pathname]);
//检查时候在管理模块团队中,没有就自动加入
const checkInTeam = async (user) => {
if (!user) return null;
try {
const { data: teamData, error: teamError } = await supabase
.from("teams")
.select("*")
.eq("attributes->>type", "uppetaAdmin")
.single();
if (teamData) {
const { data: teamMembers, error: teamMembersError } = await supabase
.from("team_membership")
.select("*")
.eq("user_id", user.id)
.eq("team_id", teamData.id)
.single();
if (!teamMembers) {
// 自动加入团队
const { data: teamMembershipData, error: teamMembershipError } =
await supabaseService.insert("team_membership", {
id: uuidv4(),
user_id: user.id,
team_id: teamData.id,
role: "MEMBER",
is_creator: false,
});
return "MEMBER";
} else {
return teamMembers.role;
}
} else {
return "MEMBER";
}
} catch (error) {
console.error("Error checking in team:", error);
return "MEMBER";
}
};
// 邮箱密码登录
const login = async (email, password) => {
try {
@@ -79,7 +111,6 @@ export const AuthProvider = ({ children }) => {
message.error(error.message || "登录失败,请稍后重试");
return;
}
setUser(data.user);
return data;
} catch (error) {
@@ -152,7 +183,7 @@ export const AuthProvider = ({ children }) => {
message.error(error.message || "登出失败,请稍后重试");
return;
}
setUser(null);
setUser({});
message.success("已成功登出");
navigate(`/login?redirectTo=${location.pathname}`, { replace: true });
} catch (error) {