我一直在尝试使用this Supabase guide进行Next.js的身份验证,尽管我可以使用客户端登录,但服务器客户端函数对我不起作用,特别是当我调用此函数时:
const supabase = createServerSupabaseClient<Database>({ req, res });
我得到错误TypeError: Cannot read properties of undefined (reading 'supabase-auth-token')
。有趣的是,如果我console.log req.headers
和req.cookies
对我来说是空的,但如果我console.log req.req. cookie,我可以在那里看到supabase-auth-token
。这是我如何尝试使用它:
const createContext = async (req: NextApiRequest, res: NextApiResponse) => {
console.log('Req Cookies:', req.req.cookies); //cookies present
console.log('Cookies:', req.cookies); //no cookies
const supabase = createServerSupabaseClient<Database>({ req, res });
console.log(supabase);
const {
data: { user },
} = await supabase.auth.getUser();
return { supabase, user };
};
export default createYoga<{
req: NextApiRequest;
res: NextApiResponse;
}>({
schema,
graphqlEndpoint: '/api/graphql',
context: createContext,
});
为什么req没有cookie,而req.req有呢?如果是这样,req.req是createServerSupabaseClient
需要的吗?我觉得我在这里遗漏了一些简单的东西。
1条答案
按热度按时间mo49yndu1#
这被证明是GraphQL Yoga的一个问题。事实证明,第一个参数中确实有req和resp,所以我应该将它们从第一个参数中删除,而不是尝试使用第一个和第二个参数。
下面是正确的代码: