[英]Supabase login get user session and profile at the same time
有沒有辦法同時獲取用戶 session 和配置文件? 我這樣做的方式是在登錄后首先獲取用戶 session 然后使用 id 獲取用戶配置文件。
const [authsession, setSession] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(false);
useEffect(() => {
const userSession = supabase.auth.session();
setSession(userSession);
if (userSession) {
getProfile(userSession.user.id);
} else {
setSession((s) => ({ ...s, profile: null }));
}
supabase.auth.onAuthStateChange((_event, session) => {
setSession(session);
if (session) {
getProfile(session.user.id);
} else {
setSession((s) => ({ ...s, profile: null }));
}
});
}, []);
const getProfile = async (id) => {
setLoading(true);
setError(false);
try {
const { data } = await supabase
.from("profiles")
.select("*")
.eq("id", id)
.single();
setSession((s) => ({ ...s, profile: data }));
} catch (error) {
setError(true);
} finally {
setLoading(false);
}
};
session.user
object 包含一個名為user_metadata
的屬性 - 此屬性包含存在於auth.users
表的raw_user_meta_data
列中的數據。
因此,您可以在自定義用戶配置文件表上設置一個數據庫觸發器,該觸發器將該表中的數據復制到 JSON 格式的auth.users
表的raw_user_meta_data
列,只要用戶配置文件表中的數據發生更改(即,您將需要觸發器在 INSERT/UPDATE 和可能的 DELETE 語句上運行)。 這樣,配置文件數據將通過登錄或令牌刷新事件自動傳遞給客戶端。
重要提示:這種方法有潛在的缺點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.