typescript 结合Steam OpenID 2.0和Supabase认证

wnavrhmk  于 2023-06-24  发布在  TypeScript
关注(0)|答案(1)|浏览(126)

因此我目前在我的SvelteKit应用中使用node-steam-openid软件包来允许用户通过Steam登录。这样做很好,它在服务器端返回用户的steam_id
但是,Steam不支持作为Supabase提供商。让用户使用电子邮件/密码或提供的任何其他选项注册是没有任何意义的。
如果可能的话,我想使用SvelteKit auth helper,但我不确定具体如何使用。
我应该注意到我启用了RLS,并且有很多操作用户应该只能在自己的行上进行。
我想我可以使用Supabase JWT secret来用jsonwebtoken包签署一个令牌,然后在用户的event.locals或其他东西中设置它。但是我遇到了管理刷新令牌的问题。看起来您还可以创建一个Supabase Policy来检查JWT,例如,检查其中的steam_id是否与他们试图修改的行的steam_id匹配。
我注意到supabase.auth.admin.createUser()函数在the docs中将emailpassword列为可选。所以也许我可以在元数据中指定steam_id?但是supabase.auth.signInWithPassword()“需要电子邮件和密码或电话号码和密码”。
我需要确保auth.users以某种方式链接到我自己的public.users(使用steam_id作为主键)。当新用户通过Steam登录时,他们应该被添加到两个表中。
我还想使用SvelteKit hooks.server.ts中间件来检查用户会话,以了解更复杂的操作。

myzjeezk

myzjeezk1#

如果我做了这样的事呢

// User logs in with Steam for the first time
// Returns their `steam_id`, then we create user as below

const { data, error } = await supabase.auth.admin.createUser({
  email: steam_id,
  password: randomPassword(),
})
// Add a trigger to add user to `public.users`

然后,为了让用户登录(以及我们将来要做的事情,因为他们现在已经注册了),我们执行以下操作

// Retrieve `uid` from `public.users` by their `steam_id`
const { data, error } = await supabase.auth.admin.getUserById(uid);
// Retrieve `password` from `data`?

const { data, error } = await supabase.auth.signInWithPassword({
  email: steam_id,
  password: password,
});

然而,似乎supabase.auth.admin.getUserById需要在服务器上,但supabase.auth.signInWithPassword需要在客户端上?

相关问题