对 getServerSideProps 的 Supabase 策略 - Next.js
Supabase policies on getServerSideProps - Next.js
我正在使用 Next.js 和 Supabase 作为 BaaS 制作一个 Trello 克隆。
在我的 Supabase table 我有这个政策:
政策在客户端有效,代码如下:
const { data } = await supabase
.from<BoardType>('board')
.select('*')
.eq('id', board.id)
.single();
但是当我尝试在 getServerSideProps
上获取董事会信息时它不起作用,它一直 return 为空。我知道,例如,如果你想在服务器端获得经过身份验证的用户,你必须使用 supabase.auth.api.getUserByCookie(context.req)
所以我不知道我是否遗漏了什么,但我找不到任何相关的东西
有人知道怎么处理吗?
[已编辑]
这里是 getServerSideProps
代码:
export const getServerSideProps: GetServerSideProps<BoardSlugProps> = async ({
query,
}) => {
const { data } = await supabase
.from<BoardType>('board')
.select('*')
.eq('id', query.slug as string)
.single();
console.log(data);
return {
props: {
board: data,
},
};
};
我发现它使用匿名密钥在数据库上发送请求,而不是 getSSProps 中经过身份验证的 jwt。不确定为什么或是否是故意的。如果您添加 role() = 'anon' 规则,它会起作用,但我认为这不是您想要的。
可能不是最好的方法,但这是我根据 Github 讨论 https://github.com/supabase/supabase/discussions/1094#discussioncomment-714633
中的一些提示解决它的方法
据我了解,与浏览器(无会话)相比,服务器端的 Supabase 客户端略有不同。从 cookie 中提取令牌并将其添加到客户端可以让对 supabase 的请求来自经过身份验证的用户。
export const getServerSideProps: GetServerSideProps = ({ req }) => {
const { user, token } = await supabase.auth.api.getUserByCookie(req);
supabase.auth.setAuth(token);
const { data, error } = await supabase.from(...
我正在使用 Next.js 和 Supabase 作为 BaaS 制作一个 Trello 克隆。
在我的 Supabase table 我有这个政策:
政策在客户端有效,代码如下:
const { data } = await supabase
.from<BoardType>('board')
.select('*')
.eq('id', board.id)
.single();
但是当我尝试在 getServerSideProps
上获取董事会信息时它不起作用,它一直 return 为空。我知道,例如,如果你想在服务器端获得经过身份验证的用户,你必须使用 supabase.auth.api.getUserByCookie(context.req)
所以我不知道我是否遗漏了什么,但我找不到任何相关的东西
有人知道怎么处理吗?
[已编辑]
这里是 getServerSideProps
代码:
export const getServerSideProps: GetServerSideProps<BoardSlugProps> = async ({
query,
}) => {
const { data } = await supabase
.from<BoardType>('board')
.select('*')
.eq('id', query.slug as string)
.single();
console.log(data);
return {
props: {
board: data,
},
};
};
我发现它使用匿名密钥在数据库上发送请求,而不是 getSSProps 中经过身份验证的 jwt。不确定为什么或是否是故意的。如果您添加 role() = 'anon' 规则,它会起作用,但我认为这不是您想要的。
可能不是最好的方法,但这是我根据 Github 讨论 https://github.com/supabase/supabase/discussions/1094#discussioncomment-714633
中的一些提示解决它的方法据我了解,与浏览器(无会话)相比,服务器端的 Supabase 客户端略有不同。从 cookie 中提取令牌并将其添加到客户端可以让对 supabase 的请求来自经过身份验证的用户。
export const getServerSideProps: GetServerSideProps = ({ req }) => {
const { user, token } = await supabase.auth.api.getUserByCookie(req);
supabase.auth.setAuth(token);
const { data, error } = await supabase.from(...