我开始学习React Native,在React中使用Supabase
与在Flutter中使用它有很大的不同。现在,我已经开始使用电子邮件登录/注册,并监听auth更改以切换导航堆栈。我相信我的两个问题是相关的,因为更新时用户/会话可能不会保存。
第一个问题是,每次打开应用程序,登录界面都会显示出来,即使我在关闭它之前登录过。我试着设置一些选项,包括localStorage
,但没有帮助。下面是我的supabaseClient.tsx
文件。
const options = {
auth: {
localStorage: AsyncStorage as any,
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: true,
},
};
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, options);
export { supabase };
第二个问题是,我尝试了一些简单的方法,只是显示登录用户在HomeScreen
上设置的displayName
,但是getUser()
和getSession()
的用户都返回null,所以我无法获取user.id
。这导致displayName
未定义,并且出现黑屏。下面是我用来获取displayName
的代码。
export function HomeScreen() {
const [displayName, setDisplayName] = useState();
useEffect(() => {
(async () => {
const user = (await supabase.auth.getSession()).data.session?.user;
console.log("User: " + user);
const { data, error } = await supabase
.from("profiles")
.select()
.eq("uid", user?.id);
if (error === null) {
data!.map((data) => {
const name = data.displayName;
console.log(name);
setDisplayName(name);
});
} else {
console.log(error.message);
}
console.log("Name: " + displayName);
})();
}, [setDisplayName]);
return (
<View>
<Text>{displayName}</Text>
</View>
);
}
1条答案
按热度按时间wqsoz72f1#
我将
localStorage
定义为any是因为我看到了一个教程。我需要改变这一点:
改为: