You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit +server.ts中获取Supabase用户对象失败,求解决

解决SvelteKit +server.ts中Supabase无法获取用户会话的问题

问题原因

SvelteKit的服务器端路由(+server.ts)运行在服务端,默认的Supabase客户端无法自动读取浏览器中的用户会话cookie,导致调用supabase.auth.getUser()时返回AuthSessionMissingError,用户对象为null。

解决方案

使用Supabase官方的SvelteKit认证助手,在服务器端创建带会话支持的Supabase客户端,手动传递请求中的cookie信息来恢复用户会话。

步骤1:安装依赖

确保安装认证助手包:

npm install @supabase/auth-helpers-sveltekit

步骤2:修改+server.ts代码

替换原代码为以下内容:

import { createServerClient } from '@supabase/auth-helpers-sveltekit';
import type { RequestHandler } from './$types';
import { SUPABASE_URL, SUPABASE_ANON_KEY } from '$env/static/private';

export const GET: RequestHandler = async ({ cookies }) => {
    // 创建服务端Supabase客户端,通过cookie恢复会话
    const supabase = createServerClient(
        SUPABASE_URL,
        SUPABASE_ANON_KEY,
        {
            cookies: {
                get: (key) => cookies.get(key),
                set: (key, value, options) => cookies.set(key, value, options),
                remove: (key, options) => cookies.delete(key, options),
            },
        }
    );

    // 获取当前用户
    const { data: { user }, error: authError } = await supabase.auth.getUser();
    if (authError || !user) {
        return new Response("未授权", { status: 401 });
    }

    // 查询用户profile数据
    const { data, error } = await supabase
        .from('profiles')
        .select('credits')
        .eq('id', user.id)
        .single();

    if (error) {
        return new Response(error.message, { status: 500 });
    }

    return new Response(JSON.stringify(data), {
        headers: { 'Content-Type': 'application/json' },
    });
};

关键说明

  • createServerClient:专门为SvelteKit服务端设计的客户端构造函数,通过传递cookie操作方法,让Supabase能够读取和维护用户会话。
  • 环境变量:确保.env文件中配置了SUPABASE_URL和SUPABASE_ANON_KEY,这两个值可从Supabase控制台获取。
  • 错误处理:增加了认证错误和查询错误的处理,返回更明确的HTTP状态码。

额外检查项

  • 确认用户已通过Supabase Auth登录,未登录状态下getUser必然返回null。
  • 验证profiles表中存在与用户id匹配的记录,且id字段类型与用户id一致。

内容的提问来源于stack exchange,提问作者BONG8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:50:08