ยฉ 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
SupabaseS
Supabaseโ€ข3y agoโ€ข
6 replies
Ldigah

Old/incorrect data fetching when using service role key to bypass RLS

I need to read the whole profiles table to get an unused number, and set it for the new logged in user.
Right now the query works, but it gives back old/incorrect numbers (not the ones I can see in the Supabase table editor UI).

import { createClient } from "@supabase/supabase-js"

export async function getNewPassportNumber() {
  const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
  const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY
  const adminSupabase = createClient(supabaseUrl, serviceRoleKey, {
    auth: {
      persistSession: false,
    },
  })
  const { data: existingPassports, error: existingPassportsError } =
    await adminSupabase.from("profiles").select("passport")

  if (existingPassportsError) {
    console.error("Error fetching existing passports:", existingPassportsError)
    return undefined
  }

  if (existingPassports) {
    const existingPassportNumbers = new Set(
      existingPassports.map((passport) => passport.passport.number)
    )
    console.log("Existing passport numbers: ", existingPassportNumbers)
    let newPassportNumber = null
    for (let i = 4000; ; i++) {
      const number = i.toString()
      if (!existingPassportNumbers.has(number)) {
        newPassportNumber = number
        break
      }
    }
    console.log("New passport number: ", newPassportNumber)
    return newPassportNumber || ""
  } else {
    console.error("Failed to fetch existing passports.")
  }
}

import { createClient } from "@supabase/supabase-js"

export async function getNewPassportNumber() {
  const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
  const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY
  const adminSupabase = createClient(supabaseUrl, serviceRoleKey, {
    auth: {
      persistSession: false,
    },
  })
  const { data: existingPassports, error: existingPassportsError } =
    await adminSupabase.from("profiles").select("passport")

  if (existingPassportsError) {
    console.error("Error fetching existing passports:", existingPassportsError)
    return undefined
  }

  if (existingPassports) {
    const existingPassportNumbers = new Set(
      existingPassports.map((passport) => passport.passport.number)
    )
    console.log("Existing passport numbers: ", existingPassportNumbers)
    let newPassportNumber = null
    for (let i = 4000; ; i++) {
      const number = i.toString()
      if (!existingPassportNumbers.has(number)) {
        newPassportNumber = number
        break
      }
    }
    console.log("New passport number: ", newPassportNumber)
    return newPassportNumber || ""
  } else {
    console.error("Failed to fetch existing passports.")
  }
}


This is a NextJS14 server action and imported in a client component after.
Am I doing something wrong here? Is there another way to do this?
Supabase banner
SupabaseJoin
Supabase gives you the tools, documentation, and community that makes managing databases, authentication, and backend infrastructure a lot less overwhelming.
45,816Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Supabase service_role_key not bypassing RLS
SupabaseSSupabase / help-and-questions
4mo ago
Alternative to service_role key?
SupabaseSSupabase / help-and-questions
3y ago
Service role not bypassing RLS
SupabaseSSupabase / help-and-questions
3y ago
JWT Service Role Key
SupabaseSSupabase / help-and-questions
3d ago