我正在使用 vite React 和 SUPABASE 开发一个项目。我可以选择登录并注册工作,但是,我无法弄清楚如何在用户注册时创建会话。 我没有使用supabase auth,因为我不知道如何实现它,所以我使用插入功能。
注册.tsx
const createUser = async () => { //This part prevents sending the form without an image for the avatar
if(!formData.avatar){
setError(true)
setTimeout(() => {
setError(false)
},5000)
}
else{
try{
const res = await supabase.from("users").insert([ //This part gets the inputs from the
{ //form and inserts it on supabase
profilepic: `${formData.avatar}`,
name: `${formData.firstName}`,
last_name: `${formData.lastName}`,
email: `${formData.email}`,
password: `${formData.password}`,
}
])
if(res.error){
throw res.error
}
if (res.status === 201) { // This part (supposedly) creates a session with the
setStatus(true); // the data from the form
setFormData(initialState);
sessionStorage.setItem('supabaseSession', JSON.stringify(formData))
setTimeout(() => {
setStatus(false);
}, 5000);
}
}
catch(error){
console.error(error.message)
}
setTimeout(() => {
navigate('/') // Lastly this redirects to the main page
},2000)
}
}
我尝试了 gpt 建议我的一些东西,但不是很可靠,因为它只知道旧版本的 supabase。
if (res.status === 201) {
const userId = res.data[0].id
setStatus(true);
setFormData(initialState);
sessionStorage.setItem('supabaseSession', JSON.stringify(formData))
sessionStorage.setItem('userId', JSON.stringify(userId))
setTimeout(() => {
setStatus(false);
}, 5000);
}
您可以通过在插入语句后添加
.select()
来获取新插入的记录。
const { data, error } = await supabase.from( "users" ).insert({
profilepic: `${ formData.avatar }`,
name: `${ formData.firstName }`,
last_name: `${ formData.lastName }`,
email: `${ formData.email }`,
password: `${ formData.password }`,
}).select()
确保对 RLS 策略同时拥有 插入权限和选择权限。
您可以点击文档右侧的按钮查看不同的用例。在 Supabase 文档中了解更多信息:https://supabase.com/docs/reference/javascript/insert?queryGroups=example&example=create-a-record-and-return-it。