使用supabase-go的AdminCreateUser创建用户时遇401授权错误
使用supabase-go调用AdminCreateUser接口时401权限错误
我在使用github.com/supabase-community/supabase-go包注册新用户时,调用AdminCreateUser接口持续返回401权限错误。
调用代码
session, err := r.supabaseClient.Auth.AdminCreateUser(types.AdminCreateUserRequest{ Aud: "", Role: "authenticated", Email: email, Phone: "", Password: &password, EmailConfirm: false, PhoneConfirm: false, UserMetadata: userMetadata, AppMetadata: nil, })
返回错误
response status code 401: {"code":401,"error_code":"no_authorization","msg":"This endpoint requires a Bearer token"}
验证:curl请求可成功
我确认使用的服务密钥正确,甚至重新生成过密钥,通过curl直接请求接口可以成功创建用户:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InF4dGVpd3BvdXRvaWl0ZXlsa2dtIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc0Mjc0OTczMSwiZXhwIjoyMDU4MzI1NzMxfQ.dECuiB00A07KJxHoP4ugQxfU_u5gTJUxewYmrh356ho" \ -H "apikey: eyJhbGciOiJIUzI1NiI...sImlhdCI6MTc0Mjc0OTczMSwi..1NzMxfQ.dECuiB00A07KJxHoP4ugQxfU_u5gTJUxewYmrh356ho" \ -d '{ "email": "test@gmail.com", "password": "password" }' \ "https://qxt...teylkgm.supabase.co/auth/v1/admin/users" {"id":"089bdf18-d9d9-45e5-92b6-213e7187d356","aud":"authenticated","role":"authenticated","email"
客户端初始化方式
我用服务密钥初始化客户端,但请求失败;不过cfg.SupaBase.SupabaseKey可以正常用于已有用户的登录操作:
supaClient, err := supabase.NewClient(cfg.SupaBase.SupabaseURL, cfg.SupaBase.SupabaseServiceKey, nil) if err != nil { log.Fatal(err) }
尝试手动添加请求头也无效:
options := &supabase.ClientOptions{ Headers: map[string]string{ "Authorization": "Bearer " + cfg.SupaBase.SupabaseServiceKey, "apikey": cfg.SupaBase.SupabaseServiceKey, }, } supaClient, err := supabase.NewClient(cfg.SupaBase.SupabaseURL, cfg.SupaBase.SupabaseServiceKey, options) if err != nil { log.Fatal(err) }
测试验证请求头
我查看了supabase-go源码,确认请求头逻辑应该正确,还拉取项目代码编写测试验证:
因为options是私有属性,先添加了一个获取headers的方法:
func (c *Client) GetHeaders() map[string]string { return c.options.headers }
然后编写测试:
func TestNewClientHeaders(t *testing.T) { client, err := supabase.NewClient(API_URL, API_KEY, nil) if err != nil { t.Fatalf("unexpected error: %v", err) } expectedHeaders := map[string]string{ "Authorization": "Bearer " + API_KEY, "apikey": API_KEY, } headers := client.GetHeaders() if !reflect.DeepEqual(headers, expectedHeaders) { t.Errorf("headers do not match, got: %v, want: %v", headers, expectedHeaders) } }
测试结果显示请求头设置完全正确,但问题依然存在,求有相同经历的人提供解决方案。
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

