supabase icon indicating copy to clipboard operation
supabase copied to clipboard

Can "serverSupabaseUser.ts" use existing user?

Open ozum opened this issue 2 years ago • 1 comments

I have several server middlewares. They are decoupled, so I'm calling serverSupabaseUser(event) several times.

Is it safe to check event.context._user. Since it starts with a _, I assume it is not for public use.

const user = event.context._user ?? await serverSupabaseUser(event);

If it is safe, can you add it to serverSupabaseUser.ts?

export const serverSupabaseUser = async (event: H3Event): Promise<User | null> => {
  const client = serverSupabaseClient(event)
  
  if (event.context._user) {
    return event.context._user;
  }

  if (!event.context._token) {
    return null
  }

  const { data: { user: supabaseUser }, error } = await client.auth.getUser(event.context._token)

  event.context._user = error ? null : supabaseUser

  return event.context._user
}

ozum avatar Jan 11 '23 12:01 ozum

good question. also concerned about the number of calls to serverSupabaseUser. currently defining in middleware but it feels redundant

import { defineEventHandler, H3Event, parseCookies, setCookie } from 'h3'
import { serverSupabaseUser } from "#supabase/server";

export default defineEventHandler(async (event: H3Event) => {
  const cookies = parseCookies(event)
  if(cookies && cookies['sb-access-token']){
    const user = await serverSupabaseUser(event);
    if (user) {
      event.context.user = user;
    } 
  }
});

JavascriptMick avatar Jul 31 '23 09:07 JavascriptMick