supabase / auth-helpers

A collection of framework specific Auth utilities for working with Supabase.
https://supabase.github.io/auth-helpers/
MIT License
902 stars 237 forks source link

Custom schema implementations don't work with the supabase ssr package #749

Open anindosarker opened 6 months ago

anindosarker commented 6 months ago

Bug report

Describe the bug

I tried creating a client with my custom schema named tasks. But it throws errors and doesn't work.

Errors in the editor Screenshot_20240311_123332

Code for the request:

import { createClient } from "@/utils/supabase/client"; // this is the client with ssr as mentioned above

const supabase = createClient();
const { data, error } = await supabase.from("tb_worker").select();
console.log("πŸš€ ~ getData ~ error:\n", error);

Errors in the console when I try to request for the data

{
    "code": "42P01",
    "details": null,
    "hint": null,
    "message": "relation \"public.tb_worker\" does not exist"
}

To Reproduce

Steps to reproduce the behavior, please provide code snippets or a repository:

  1. Create a sample nextjs project with supabase from the docs
  2. Download sample database types for any project with custom schema.
  3. Update either the browser client or the server client with the custom schema like this
    
    import { createBrowserClient } from "@supabase/ssr";
    import { Database } from "../types/database";

export const createClient = () => createBrowserClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { db: { schema: "tasks", // I'm using custom schema named tasks. You can change it to your schema name }, } );


4. At this stage, you'll get typescript errors. 
5. You can still try to query for the data from the custom schema and will get the same errors.
```ts
import { createClient } from "@/utils/supabase/client"; // this is the client with ssr as mentioned above

const supabase = createClient();
const { data, error } = await supabase.from("tb_worker").select();
console.log("πŸš€ ~ getData ~ error:\n", error);

Expected behavior

Should get the data. It works perfectly with the supabase js library. Example: page.tsx

"use client";

import { createSupbaseClent } from "@/utils/supabase/supabaseClient";
import { useEffect, useState } from "react";

export default function Page() {
  const [notes, setNotes] = useState<any[] | null>(null);
  const supabase = createSupbaseClent();

  useEffect(() => {
    const getData = async () => {
      const { data, error } = await supabase.from("tb_worker").select();
      console.log("πŸš€ ~ getData ~ error:\n", error);
      setNotes(data);
    };
    getData();
  }, []);

  if (!notes) return <div>Loading ...</div>;

  return (
    <>
      <pre>{JSON.stringify(notes, null, 2)}</pre>
    </>
  );
}

System information

Additional context

I've checked wherther it's an issue of Typescript types generated by the database type generation in the supabase dashboard. Maybe this bug is also related to that as well.

nsenthilkumar commented 2 months ago

This seems to still be an issue