docs: indicate publishable key instead of anon in many examples (#37411)
* docs: indicate publishable key instead of anon in many examples * replace your-anon-key to string indicating publishable or anon * fix your_... * apply suggestion from @ChrisChinchilla Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com> * Update keys in code examples * Prettier fix * Update apps/docs/content/guides/functions/schedule-functions.mdx --------- Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com>
This commit is contained in:
committed by
GitHub
parent
be45baf6c4
commit
93ba2a312c
@@ -150,7 +150,7 @@ export const GET: APIRoute = async ({ request, cookies, redirect }) => {
|
||||
if (code) {
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -194,18 +194,22 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
const headers = new Headers()
|
||||
|
||||
if (code) {
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
const { error } = await supabase.auth.exchangeCodeForSession(code)
|
||||
|
||||
@@ -233,7 +237,7 @@ app.get("/auth/callback", async function (req, res) {
|
||||
if (code) {
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_ANON_KEY, {
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(context.req.headers.cookie ?? '')
|
||||
|
||||
@@ -283,7 +283,7 @@ With our database set up, we need to process and store all `.mdx` files in the `
|
||||
|
||||
```bash
|
||||
NEXT_PUBLIC_SUPABASE_URL=
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
|
||||
SUPABASE_SERVICE_ROLE_KEY=
|
||||
|
||||
# Get your key at https://platform.openai.com/account/api-keys
|
||||
@@ -470,8 +470,8 @@ const handleConfirm = React.useCallback(
|
||||
|
||||
const eventSource = new SSE(`api/vector-search`, {
|
||||
headers: {
|
||||
apikey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? '',
|
||||
Authorization: `Bearer ${process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY}`,
|
||||
apikey: process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY ?? '',
|
||||
Authorization: `Bearer ${process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
payload: JSON.stringify({ query }),
|
||||
|
||||
@@ -32,11 +32,15 @@ import fetchRetry from 'fetch-retry'
|
||||
const fetchWithRetry = fetchRetry(fetch)
|
||||
|
||||
// Create a Supabase client instance with the custom fetch
|
||||
const supabase = createClient('https://your-supabase-url.supabase.co', 'your-anon-key', {
|
||||
global: {
|
||||
fetch: fetchWithRetry,
|
||||
},
|
||||
})
|
||||
const supabase = createClient(
|
||||
'https://your-supabase-url.supabase.co',
|
||||
'sb_publishable_... or anon key',
|
||||
{
|
||||
global: {
|
||||
fetch: fetchWithRetry,
|
||||
},
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
## 3. Configure retry options
|
||||
|
||||
@@ -72,7 +72,7 @@ Both of these routes require the `anon` key to be passed through an `apikey` hea
|
||||
You can interact with your API directly via HTTP requests, or you can use the client libraries which we provide.
|
||||
|
||||
Let's see how to make a request to the `todos` table which we created in the first step,
|
||||
using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_ANON_KEY`) we provided:
|
||||
using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_PUBLISHABLE_KEY`) we provided:
|
||||
|
||||
<Tabs
|
||||
scrollable
|
||||
@@ -86,7 +86,7 @@ using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_ANON_KEY`) we provided:
|
||||
```javascript
|
||||
// Initialize the JS client
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY)
|
||||
|
||||
// Make a request
|
||||
const { data: todos, error } = await supabase.from('todos').select('*')
|
||||
@@ -98,8 +98,8 @@ const { data: todos, error } = await supabase.from('todos').select('*')
|
||||
```bash
|
||||
# Append /rest/v1/ to your URL, and then use the table name as the route
|
||||
curl '<SUPABASE_URL>/rest/v1/todos' \
|
||||
-H "apikey: <SUPABASE_ANON_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_ANON_KEY>"
|
||||
-H "apikey: <SUPABASE_PUBLISHABLE_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_PUBLISHABLE_KEY>"
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
|
||||
@@ -95,7 +95,10 @@ You can supply the type definitions to `supabase-js` like so:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
import { Database } from './database.types'
|
||||
|
||||
const supabase = createClient<Database>(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY)
|
||||
const supabase = createClient<Database>(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
```
|
||||
|
||||
## Helper types for tables and joins
|
||||
|
||||
@@ -45,7 +45,9 @@ Now you can access these schemas from data APIs:
|
||||
```js
|
||||
// Initialize the JS client
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { db: { schema: 'myschema' } })
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {
|
||||
db: { schema: 'myschema' },
|
||||
})
|
||||
|
||||
// Make a request
|
||||
const { data: todos, error } = await supabase.from('todos').select('*')
|
||||
@@ -81,14 +83,14 @@ final data = await supabase.schema('myschema').from('todos').select();
|
||||
|
||||
# for GET or HEAD request use Accept-Profile
|
||||
curl '<SUPABASE_URL>/rest/v1/todos' \
|
||||
-H "apikey: <SUPABASE_ANON_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_ANON_KEY>" \
|
||||
-H "apikey: <SUPABASE_PUBLISHABLE_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_PUBLISHABLE_KEY>" \
|
||||
-H "Accept-Profile: myschema"
|
||||
|
||||
# for POST, PATCH, PUT and DELETE Request use Content-Profile
|
||||
curl -X POST '<SUPABASE_URL>/rest/v1/todos' \
|
||||
-H "apikey: <SUPABASE_ANON_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_ANON_KEY>" \
|
||||
-H "apikey: <SUPABASE_PUBLISHABLE_KEY>" \
|
||||
-H "Authorization: Bearer <SUPABASE_PUBLISHABLE_KEY>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Content-Profile: myschema" \
|
||||
-d '{"column_name": "value"}'
|
||||
|
||||
@@ -57,7 +57,7 @@ Call the [`signInAnonymously()`](/docs/reference/javascript/auth-signinanonymous
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.signInAnonymously()
|
||||
@@ -121,7 +121,7 @@ You can use the [`updateUser()`](/docs/reference/javascript/auth-updateuser) met
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data: updateEmailData, error: updateEmailError } = await supabase.auth.updateUser({
|
||||
@@ -205,7 +205,7 @@ You can use the [`linkIdentity()`](/docs/reference/javascript/auth-linkidentity)
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.linkIdentity({ provider: 'google' })
|
||||
|
||||
@@ -107,7 +107,10 @@ When the user clicks on the link, the request will hit `https://api.example.com/
|
||||
|
||||
```ts
|
||||
import { createClient, type EmailOtpType } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
const { token_hash, type } = Object.fromEntries(new URLSearchParams(window.location.search))
|
||||
|
||||
@@ -27,7 +27,7 @@ import 'package:supabase_auth_ui/supabase_auth_ui.dart';
|
||||
void main() async {
|
||||
await Supabase.initialize(
|
||||
url: dotenv.get('SUPABASE_URL'),
|
||||
anonKey: dotenv.get('SUPABASE_ANON_KEY'),
|
||||
anonKey: dotenv.get('SUPABASE_PUBLISHABLE_KEY'),
|
||||
);
|
||||
|
||||
runApp(const MyApp());
|
||||
|
||||
@@ -57,7 +57,7 @@ Retrieve your project URL and anon key in your project's [API settings](https://
|
||||
|
||||
```bash .env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-supabase-publishable-key
|
||||
```
|
||||
|
||||
## Basic setup
|
||||
|
||||
@@ -55,7 +55,7 @@ Retrieve your project's URL and anon key from your [API settings](https://supaba
|
||||
|
||||
```bash .env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-supabase-publishable-key
|
||||
```
|
||||
|
||||
## Managing session with middleware
|
||||
@@ -1172,7 +1172,7 @@ import { createClient } from '@supabase/supabase-js'
|
||||
export default async function Page() {
|
||||
const supabase = createClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
|
||||
const { data } = await supabase.from('todos').select()
|
||||
@@ -1192,7 +1192,7 @@ import type { Database } from '@/lib/database.types'
|
||||
export default async function Page() {
|
||||
const supabase = createClient<Database>(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
|
||||
const { data } = await supabase.from('todos').select()
|
||||
@@ -1229,7 +1229,7 @@ export async function POST(request) {
|
||||
|
||||
const supabase = createClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
|
||||
const { data } = await supabase.from('todos').insert({ title }).select()
|
||||
@@ -1252,7 +1252,7 @@ export async function POST(request: Request) {
|
||||
|
||||
const supabase = createClient<Database>(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
|
||||
const { data } = await supabase.from('todos').insert({ title }).select()
|
||||
|
||||
@@ -59,7 +59,7 @@ Retrieve your project URL and anon key in your project's [API settings](https://
|
||||
|
||||
```bash .env
|
||||
SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
### Code Exchange route
|
||||
@@ -89,7 +89,7 @@ export const loader = async ({ request }) => {
|
||||
if (code) {
|
||||
const supabaseClient = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_ANON_KEY,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
{ request, response }
|
||||
)
|
||||
await supabaseClient.auth.exchangeCodeForSession(code)
|
||||
@@ -122,7 +122,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
|
||||
if (code) {
|
||||
const supabaseClient = createServerClient<Database>(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_ANON_KEY!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{ request, response }
|
||||
)
|
||||
await supabaseClient.auth.exchangeCodeForSession(code)
|
||||
@@ -145,7 +145,7 @@ The Supabase client can now be used server-side - in loaders and actions - by ca
|
||||
|
||||
### Loader
|
||||
|
||||
Loader functions run on the server immediately before the component is rendered. They respond to all GET requests on a route. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_ANON_KEY`, and a `Request` and `Response`.
|
||||
Loader functions run on the server immediately before the component is rendered. They respond to all GET requests on a route. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_PUBLISHABLE_KEY`, and a `Request` and `Response`.
|
||||
|
||||
<Tabs
|
||||
scrollable
|
||||
@@ -167,7 +167,7 @@ export const loader = async ({ request }) => {
|
||||
|
||||
const supabaseClient = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_ANON_KEY,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
{ request, response }
|
||||
)
|
||||
|
||||
@@ -203,7 +203,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
|
||||
const response = new Response()
|
||||
const supabaseClient = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_ANON_KEY!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{ request, response }
|
||||
)
|
||||
|
||||
@@ -229,7 +229,7 @@ Supabase will set cookie headers to manage the user's auth session, therefore, t
|
||||
|
||||
### Action
|
||||
|
||||
Action functions run on the server and respond to HTTP requests to a route, other than GET - POST, PUT, PATCH, DELETE etc. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_ANON_KEY`, and a `Request` and `Response`.
|
||||
Action functions run on the server and respond to HTTP requests to a route, other than GET - POST, PUT, PATCH, DELETE etc. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_PUBLISHABLE_KEY`, and a `Request` and `Response`.
|
||||
|
||||
<Tabs
|
||||
scrollable
|
||||
@@ -249,7 +249,7 @@ export const action = async ({ request }) => {
|
||||
|
||||
const supabaseClient = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_ANON_KEY,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
{ request, response }
|
||||
)
|
||||
|
||||
@@ -284,7 +284,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
|
||||
const supabaseClient = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_ANON_KEY!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{ request, response }
|
||||
)
|
||||
|
||||
@@ -355,7 +355,7 @@ Since our environment variables are not available client-side, we need to plumb
|
||||
export const loader = () => {
|
||||
const env = {
|
||||
SUPABASE_URL: process.env.SUPABASE_URL,
|
||||
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY,
|
||||
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
}
|
||||
|
||||
return json({ env })
|
||||
@@ -377,7 +377,9 @@ const { env } = useLoaderData()
|
||||
We then want to instantiate a single instance of a Supabase browser client, to be used across our client-side components.
|
||||
|
||||
```jsx app/root.jsx
|
||||
const [supabase] = useState(() => createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY))
|
||||
const [supabase] = useState(() =>
|
||||
createBrowserClient(env.SUPABASE_URL, env.SUPABASE_PUBLISHABLE_KEY)
|
||||
)
|
||||
```
|
||||
|
||||
And then we can share this instance across our application with Outlet Context.
|
||||
@@ -393,7 +395,7 @@ And then we can share this instance across our application with Outlet Context.
|
||||
export const loader = ({}: LoaderFunctionArgs) => {
|
||||
const env = {
|
||||
SUPABASE_URL: process.env.SUPABASE_URL!,
|
||||
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY!,
|
||||
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
}
|
||||
|
||||
return json({ env })
|
||||
@@ -416,7 +418,7 @@ We then want to instantiate a single instance of a Supabase browser client, to b
|
||||
|
||||
```tsx app/root.tsx
|
||||
const [supabase] = useState(() =>
|
||||
createBrowserClient<Database>(env.SUPABASE_URL, env.SUPABASE_ANON_KEY)
|
||||
createBrowserClient<Database>(env.SUPABASE_URL, env.SUPABASE_PUBLISHABLE_KEY)
|
||||
)
|
||||
```
|
||||
|
||||
@@ -453,15 +455,19 @@ Let's pipe that through from our loader.
|
||||
export const loader = async ({ request }) => {
|
||||
const env = {
|
||||
SUPABASE_URL: process.env.SUPABASE_URL,
|
||||
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY,
|
||||
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
}
|
||||
|
||||
const response = new Response()
|
||||
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, {
|
||||
request,
|
||||
response,
|
||||
})
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
request,
|
||||
response,
|
||||
}
|
||||
)
|
||||
|
||||
const {
|
||||
data: { session },
|
||||
@@ -487,15 +493,19 @@ export const loader = async ({ request }) => {
|
||||
export const loader = async ({ request }: LoaderFunctionArgs) => {
|
||||
const env = {
|
||||
SUPABASE_URL: process.env.SUPABASE_URL!,
|
||||
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY!,
|
||||
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
}
|
||||
|
||||
const response = new Response()
|
||||
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
request,
|
||||
response,
|
||||
})
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
request,
|
||||
response,
|
||||
}
|
||||
)
|
||||
|
||||
const {
|
||||
data: { session },
|
||||
@@ -533,7 +543,9 @@ And then use the revalidator, inside the `onAuthStateChange` hook.
|
||||
const { env, session } = useLoaderData()
|
||||
const { revalidate } = useRevalidator()
|
||||
|
||||
const [supabase] = useState(() => createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY))
|
||||
const [supabase] = useState(() =>
|
||||
createBrowserClient(env.SUPABASE_URL, env.SUPABASE_PUBLISHABLE_KEY)
|
||||
)
|
||||
|
||||
const serverAccessToken = session?.access_token
|
||||
|
||||
@@ -562,7 +574,7 @@ const { env, session } = useLoaderData<typeof loader>()
|
||||
const { revalidate } = useRevalidator()
|
||||
|
||||
const [supabase] = useState(() =>
|
||||
createBrowserClient<Database>(env.SUPABASE_URL, env.SUPABASE_ANON_KEY)
|
||||
createBrowserClient<Database>(env.SUPABASE_URL, env.SUPABASE_PUBLISHABLE_KEY)
|
||||
)
|
||||
|
||||
const serverAccessToken = session?.access_token
|
||||
@@ -703,10 +715,14 @@ import { useEffect, useState } from 'react'
|
||||
|
||||
export const loader = async ({ request }) => {
|
||||
const response = new Response()
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, {
|
||||
request,
|
||||
response,
|
||||
})
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
request,
|
||||
response,
|
||||
}
|
||||
)
|
||||
|
||||
const { data } = await supabase.from('posts').select()
|
||||
|
||||
@@ -760,7 +776,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
|
||||
const response = new Response()
|
||||
const supabase = createServerClient<Database>(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_ANON_KEY!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
request,
|
||||
response,
|
||||
|
||||
@@ -45,7 +45,7 @@ Retrieve your project's URL and anon key from your [API settings](https://supaba
|
||||
```bash .env.local
|
||||
# Find these in your Supabase project settings https://supabase.com/dashboard/project/_/settings/api
|
||||
PUBLIC_SUPABASE_URL=https://your-project.supabase.co
|
||||
PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
||||
PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon key
|
||||
```
|
||||
|
||||
### Creating a Supabase client
|
||||
@@ -65,13 +65,13 @@ Create a new `hooks.server.js` file in the root of your project and populate wit
|
||||
|
||||
```js src/hooks.server.js
|
||||
// src/hooks.server.js
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit'
|
||||
|
||||
export const handle = async ({ event, resolve }) => {
|
||||
event.locals.supabase = createSupabaseServerClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event,
|
||||
})
|
||||
|
||||
@@ -111,14 +111,14 @@ Create a new `hooks.server.ts` file in the root of your project and populate wit
|
||||
|
||||
```ts src/hooks.server.ts
|
||||
// src/hooks.server.ts
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import type { Handle } from '@sveltejs/kit'
|
||||
|
||||
export const handle: Handle = async ({ event, resolve }) => {
|
||||
event.locals.supabase = createSupabaseServerClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event,
|
||||
})
|
||||
|
||||
@@ -307,7 +307,7 @@ To utilize Supabase in shared load functions and within pages, it is essential t
|
||||
|
||||
```ts src/routes/+layout.js
|
||||
// src/routes/+layout.js
|
||||
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit'
|
||||
|
||||
export const load = async ({ fetch, data, depends }) => {
|
||||
@@ -315,7 +315,7 @@ export const load = async ({ fetch, data, depends }) => {
|
||||
|
||||
const supabase = createSupabaseLoadClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event: { fetch },
|
||||
serverSession: data.session,
|
||||
})
|
||||
@@ -339,7 +339,7 @@ export const load = async ({ fetch, data, depends }) => {
|
||||
|
||||
```ts src/routes/+layout.ts
|
||||
// src/routes/+layout.ts
|
||||
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import type { Database } from '../DatabaseDefinitions'
|
||||
|
||||
@@ -348,7 +348,7 @@ export const load = async ({ fetch, data, depends }) => {
|
||||
|
||||
const supabase = createSupabaseLoadClient<Database>({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event: { fetch },
|
||||
serverSession: data.session,
|
||||
})
|
||||
@@ -648,7 +648,7 @@ Edit your `/src/hooks.server.js` with the below:
|
||||
|
||||
```js src/hooks.server.js
|
||||
// src/hooks.server.js
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import { redirect, error } from '@sveltejs/kit'
|
||||
import { sequence } from '@sveltejs/kit/hooks'
|
||||
@@ -656,7 +656,7 @@ import { sequence } from '@sveltejs/kit/hooks'
|
||||
async function supabase({ event, resolve }) {
|
||||
event.locals.supabase = createSupabaseServerClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event,
|
||||
})
|
||||
|
||||
@@ -717,14 +717,14 @@ export const handle = sequence(supabase, authorization)
|
||||
```ts src/hooks.server.ts
|
||||
// src/hooks.server.ts
|
||||
import { type Handle, redirect, error } from '@sveltejs/kit'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import { sequence } from '@sveltejs/kit/hooks'
|
||||
|
||||
async function supabase({ event, resolve }) {
|
||||
event.locals.supabase = createSupabaseServerClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event,
|
||||
})
|
||||
|
||||
@@ -932,9 +932,12 @@ import { createClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import { env } from '$env/dynamic/public'
|
||||
// or use the static env
|
||||
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY)
|
||||
export const supabaseClient = createClient(
|
||||
env.PUBLIC_SUPABASE_URL,
|
||||
env.PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -942,14 +945,14 @@ export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_S
|
||||
|
||||
```js src/hooks.server.ts
|
||||
// src/hooks.server.ts
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import type { Handle } from '@sveltejs/kit'
|
||||
|
||||
export const handle: Handle = async ({ event, resolve }) => {
|
||||
event.locals.supabase = createSupabaseServerClient({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event,
|
||||
})
|
||||
|
||||
@@ -1024,7 +1027,7 @@ In order to use the Supabase library in your client code you will need to setup
|
||||
```ts src/routes/+layout.ts
|
||||
// src/routes/+layout.ts
|
||||
import { invalidate } from '$app/navigation'
|
||||
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import type { LayoutLoad } from './$types'
|
||||
import type { Database } from '../DatabaseDefinitions'
|
||||
@@ -1034,7 +1037,7 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => {
|
||||
|
||||
const supabase = createSupabaseLoadClient<Database>({
|
||||
supabaseUrl: PUBLIC_SUPABASE_URL,
|
||||
supabaseKey: PUBLIC_SUPABASE_ANON_KEY,
|
||||
supabaseKey: PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
event: { fetch },
|
||||
serverSession: data.session,
|
||||
})
|
||||
@@ -1295,12 +1298,16 @@ import { dev } from '$app/environment'
|
||||
import { env } from '$env/dynamic/public'
|
||||
// or use the static env
|
||||
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY, {
|
||||
persistSession: false,
|
||||
autoRefreshToken: false,
|
||||
})
|
||||
export const supabaseClient = createClient(
|
||||
env.PUBLIC_SUPABASE_URL,
|
||||
env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
persistSession: false,
|
||||
autoRefreshToken: false,
|
||||
}
|
||||
)
|
||||
|
||||
setupSupabaseHelpers({
|
||||
supabaseClient,
|
||||
@@ -1318,9 +1325,12 @@ import { createClient } from '@supabase/auth-helpers-sveltekit'
|
||||
import { env } from '$env/dynamic/public'
|
||||
// or use the static env
|
||||
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY)
|
||||
export const supabaseClient = createClient(
|
||||
env.PUBLIC_SUPABASE_URL,
|
||||
env.PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -1646,7 +1656,7 @@ import { createSupabaseClient } from '@supabase/auth-helpers-sveltekit';
|
||||
|
||||
const { supabaseClient } = createSupabaseClient(
|
||||
import.meta.env.VITE_SUPABASE_URL as string,
|
||||
import.meta.env.VITE_SUPABASE_ANON_KEY as string
|
||||
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY as string
|
||||
);
|
||||
|
||||
export { supabaseClient };
|
||||
@@ -1662,12 +1672,16 @@ import { dev } from '$app/environment'
|
||||
import { env } from '$env/dynamic/public'
|
||||
// or use the static env
|
||||
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY, {
|
||||
persistSession: false,
|
||||
autoRefreshToken: false,
|
||||
})
|
||||
export const supabaseClient = createClient(
|
||||
env.PUBLIC_SUPABASE_URL,
|
||||
env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
persistSession: false,
|
||||
autoRefreshToken: false,
|
||||
}
|
||||
)
|
||||
|
||||
setupSupabaseHelpers({
|
||||
supabaseClient,
|
||||
|
||||
@@ -82,7 +82,10 @@ When a user unenrolls a factor, call `supabase.auth.mfa.unenroll()` with the ID
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
supabase.auth.mfa.unenroll({ factorId: 'd30fd651-184e-4748-a928-0a4b9be1d429' })
|
||||
|
||||
@@ -195,7 +195,7 @@ To initiate a sign-in request from your application's user interface (i.e. the S
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
supabase.auth.signInWithSSO({
|
||||
@@ -436,7 +436,7 @@ Yes, also referred to as [cross-origin authentication within the same site](http
|
||||
|
||||
```ts
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.signInWithSSO({
|
||||
|
||||
@@ -93,11 +93,15 @@ If you wish to send a JWT from a Third-Party Auth provider, or one you made your
|
||||
```typescript
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', {
|
||||
accessToken: async () => {
|
||||
return '<your JWT here>'
|
||||
},
|
||||
})
|
||||
const supabase = createClient(
|
||||
'https://<supabase-project>.supabase.co',
|
||||
'SUPABASE_PUBLISHABLE_KEY',
|
||||
{
|
||||
accessToken: async () => {
|
||||
return '<your JWT here>'
|
||||
},
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -124,7 +128,7 @@ import Supabase
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://<supabase-project>.supabase.co")!,
|
||||
supabaseKey: "SUPABASE_ANON_KEY",
|
||||
supabaseKey: "SUPABASE_PUBLISHABLE_KEY",
|
||||
options: SupabaseClientOptions(
|
||||
auth: SupabaseClientOptions.AuthOptions(
|
||||
accessToken: {
|
||||
@@ -142,7 +146,7 @@ let supabase = SupabaseClient(
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
"https://<supabase-project>.supabase.co",
|
||||
"SUPABASE_ANON_KEY"
|
||||
"SUPABASE_PUBLISHABLE_KEY"
|
||||
) {
|
||||
accessToken = {
|
||||
"<your JWT here>"
|
||||
|
||||
@@ -57,7 +57,7 @@ If you don't specify a redirect URL, the user is automatically redirected to you
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signUpNewUser() {
|
||||
@@ -266,7 +266,7 @@ export const GET: APIRoute = async ({ request, cookies, redirect }) => {
|
||||
if (token_hash && type) {
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -313,16 +313,20 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
const headers = new Headers()
|
||||
|
||||
if (token_hash && type) {
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
},
|
||||
setAll(key, value, options) {
|
||||
headers.append('Set-Cookie', serializeCookieHeader(key, value, options))
|
||||
},
|
||||
},
|
||||
setAll(key, value, options) {
|
||||
headers.append('Set-Cookie', serializeCookieHeader(key, value, options))
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
const { error } = await supabase.auth.verifyOtp({
|
||||
type,
|
||||
@@ -390,7 +394,7 @@ If you don't specify a redirect URL, the user is automatically redirected to you
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signUpNewUser() {
|
||||
@@ -477,7 +481,7 @@ When your user signs in, call [`signInWithPassword()`](/docs/reference/javascrip
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithEmail() {
|
||||
@@ -570,7 +574,7 @@ Collect the user's email address and request a password reset email. Specify the
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
await supabase.auth.resetPasswordForEmail('valid.email@supabase.io', {
|
||||
@@ -749,7 +753,7 @@ export const GET: APIRoute = async ({ request, cookies, redirect }) => {
|
||||
if (token_hash && type) {
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -796,16 +800,20 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
const headers = new Headers()
|
||||
|
||||
if (token_hash && type) {
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
},
|
||||
setAll(key, value, options) {
|
||||
headers.append('Set-Cookie', serializeCookieHeader(key, value, options))
|
||||
},
|
||||
},
|
||||
setAll(key, value, options) {
|
||||
headers.append('Set-Cookie', serializeCookieHeader(key, value, options))
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
const { error } = await supabase.auth.verifyOtp({
|
||||
type,
|
||||
@@ -1004,7 +1012,7 @@ To sign up the user, call [`signUp()`](/docs/reference/javascript/auth-signup) w
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.signUp({
|
||||
@@ -1074,7 +1082,7 @@ You should present a form to the user so they can input the 6 digit pin, then se
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const {
|
||||
@@ -1158,7 +1166,7 @@ Call the function to sign in with the user's phone number and password:
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.signInWithPassword({
|
||||
|
||||
@@ -60,7 +60,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=your-project-url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon key
|
||||
```
|
||||
|
||||
</StepHikeCompact.Code>
|
||||
|
||||
@@ -77,7 +77,7 @@ hideToc: true
|
||||
import { createClient, processLock } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
|
||||
auth: {
|
||||
|
||||
@@ -78,7 +78,7 @@ hideToc: true
|
||||
import { Auth } from '@supabase/auth-ui-react'
|
||||
import { ThemeSupa } from '@supabase/auth-ui-shared'
|
||||
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
|
||||
export default function App() {
|
||||
const [session, setSession] = useState(null)
|
||||
|
||||
@@ -50,7 +50,7 @@ In your environment variables file, set your Supabase URL and Supabase Anon Key:
|
||||
|
||||
```bash .env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -58,7 +58,7 @@ NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
|
||||
```bash .env.local
|
||||
PUBLIC_SUPABASE_URL=your_supabase_project_url
|
||||
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -66,7 +66,7 @@ PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
|
||||
```bash .env
|
||||
PUBLIC_SUPABASE_URL=your_supabase_project_url
|
||||
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -74,7 +74,7 @@ PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
|
||||
```bash .env
|
||||
SUPABASE_URL=your_supabase_project_url
|
||||
SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -90,7 +90,7 @@ SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
|
||||
```bash .env
|
||||
SUPABASE_URL=your_supabase_project_url
|
||||
SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
Install [dotenv](https://www.npmjs.com/package/dotenv):
|
||||
@@ -134,7 +134,7 @@ pnpm add dotenv
|
||||
|
||||
```bash .env
|
||||
SUPABASE_URL=your_supabase_project_url
|
||||
SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||
SUPABASE_PUBLISHABLE_KEY=sb_publishable_... or anon keyY
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -172,7 +172,7 @@ import { createBrowserClient } from '@supabase/ssr'
|
||||
export function createClient() {
|
||||
return createBrowserClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
}
|
||||
```
|
||||
@@ -190,7 +190,7 @@ export async function createClient() {
|
||||
|
||||
return createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -252,7 +252,7 @@ export async function updateSession(request: NextRequest) {
|
||||
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -324,12 +324,12 @@ export async function updateSession(request: NextRequest) {
|
||||
<TabPanel id="hooks" label="Hooks">
|
||||
|
||||
```ts hooks.server.ts
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
import { createServerClient } from '@supabase/ssr'
|
||||
import type { Handle } from '@sveltejs/kit'
|
||||
|
||||
export const handle: Handle = async ({ event, resolve }) => {
|
||||
event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return event.cookies.getAll()
|
||||
@@ -388,7 +388,7 @@ export const handle: Handle = async ({ event, resolve }) => {
|
||||
Page components can get access to the Supabase client from the `data` object due to this load function.
|
||||
|
||||
```ts +layout.ts
|
||||
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import type { LayoutLoad } from './$types'
|
||||
import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ssr'
|
||||
|
||||
@@ -396,12 +396,12 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => {
|
||||
depends('supabase:auth')
|
||||
|
||||
const supabase = isBrowser()
|
||||
? createBrowserClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
? createBrowserClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
global: {
|
||||
fetch,
|
||||
},
|
||||
})
|
||||
: createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
: createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
global: {
|
||||
fetch,
|
||||
},
|
||||
@@ -475,7 +475,7 @@ import { createServerClient, parseCookieHeader } from "@supabase/ssr";
|
||||
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -501,7 +501,7 @@ const supabase = createServerClient(
|
||||
|
||||
const supabase = createBrowserClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
);
|
||||
</script>
|
||||
```
|
||||
@@ -517,7 +517,7 @@ import type { APIContext } from "astro";
|
||||
export async function GET(context: APIContext) {
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -546,7 +546,7 @@ import { defineMiddleware } from 'astro:middleware'
|
||||
export const onRequest = defineMiddleware(async (context, next) => {
|
||||
const supabase = createServerClient(
|
||||
import.meta.env.PUBLIC_SUPABASE_URL,
|
||||
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
|
||||
import.meta.env.PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -587,18 +587,22 @@ import { createServerClient, parseCookieHeader, serializeCookieHeader } from '@s
|
||||
export async function loader({ request }: LoaderFunctionArgs) {
|
||||
const headers = new Headers()
|
||||
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
return new Response('...', {
|
||||
headers,
|
||||
@@ -617,18 +621,22 @@ import { createServerClient, parseCookieHeader, serializeCookieHeader } from '@s
|
||||
export async function action({ request }: ActionFunctionArgs) {
|
||||
const headers = new Headers()
|
||||
|
||||
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
const supabase = createServerClient(
|
||||
process.env.SUPABASE_URL!,
|
||||
process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(request.headers.get('Cookie') ?? '')
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
setAll(cookiesToSet) {
|
||||
cookiesToSet.forEach(({ name, value, options }) =>
|
||||
headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
|
||||
)
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
return new Response('...', {
|
||||
headers,
|
||||
@@ -649,7 +657,7 @@ export async function loader({}: LoaderFunctionArgs) {
|
||||
return {
|
||||
env: {
|
||||
SUPABASE_URL: process.env.SUPABASE_URL!,
|
||||
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY!,
|
||||
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY!,
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -657,7 +665,7 @@ export async function loader({}: LoaderFunctionArgs) {
|
||||
export default function Index() {
|
||||
const { env } = useLoaderData<typeof loader>();
|
||||
|
||||
const supabase = createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY);
|
||||
const supabase = createBrowserClient(env.SUPABASE_URL, env.SUPABASE_PUBLISHABLE_KEY);
|
||||
|
||||
return ...
|
||||
}
|
||||
@@ -782,7 +790,7 @@ export default function Index() {
|
||||
const { createServerClient, parseCookieHeader, serializeCookieHeader } = require('@supabase/ssr')
|
||||
|
||||
exports.createClient = (context) => {
|
||||
return createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, {
|
||||
return createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_PUBLISHABLE_KEY, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(context.req.headers.cookie ?? '')
|
||||
@@ -853,21 +861,21 @@ export const getSupabase = (c: Context) => {
|
||||
|
||||
type SupabaseEnv = {
|
||||
SUPABASE_URL: string
|
||||
SUPABASE_ANON_KEY: string
|
||||
SUPABASE_PUBLISHABLE_KEY: string
|
||||
}
|
||||
|
||||
export const supabaseMiddleware = (): MiddlewareHandler => {
|
||||
return async (c, next) => {
|
||||
const supabaseEnv = env<SupabaseEnv>(c)
|
||||
const supabaseUrl = supabaseEnv.SUPABASE_URL
|
||||
const supabaseAnonKey = supabaseEnv.SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = supabaseEnv.SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
if (!supabaseUrl) {
|
||||
throw new Error('SUPABASE_URL missing!')
|
||||
}
|
||||
|
||||
if (!supabaseAnonKey) {
|
||||
throw new Error('SUPABASE_ANON_KEY missing!')
|
||||
throw new Error('SUPABASE_PUBLISHABLE_KEY missing!')
|
||||
}
|
||||
|
||||
const supabase = createServerClient(supabaseUrl, supabaseAnonKey, {
|
||||
|
||||
@@ -36,7 +36,7 @@ npm install @supabase/supabase-js @supabase/ssr
|
||||
|
||||
Create a `.env.local` file in your project root directory.
|
||||
|
||||
Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`:
|
||||
Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY`:
|
||||
|
||||
<ProjectConfigVariables variable="url" />
|
||||
<ProjectConfigVariables variable="anonKey" />
|
||||
@@ -49,7 +49,7 @@ Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`:
|
||||
|
||||
```txt name=.env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=<your_supabase_project_url>
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your_supabase_anon_key>
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<sb_publishable_... or anon keyY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -120,7 +120,7 @@ import { createBrowserClient } from '@supabase/ssr'
|
||||
export function createClient() {
|
||||
return createBrowserClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
}
|
||||
```
|
||||
@@ -134,7 +134,7 @@ export async function createClient() {
|
||||
|
||||
return createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -232,7 +232,7 @@ export async function updateSession(request: NextRequest) {
|
||||
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -557,7 +557,7 @@ npm install @supabase/supabase-js @supabase/ssr
|
||||
|
||||
Create a `.env.local` file in your project root directory.
|
||||
|
||||
Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`:
|
||||
Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY`:
|
||||
|
||||
<ProjectConfigVariables variable="url" />
|
||||
<ProjectConfigVariables variable="anonKey" />
|
||||
@@ -568,7 +568,7 @@ Fill in your `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`:
|
||||
|
||||
```txt name=.env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=<your_supabase_project_url>
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your_supabase_anon_key>
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<sb_publishable_... or anon keyY>
|
||||
```
|
||||
|
||||
</StepHikeCompact.Code>
|
||||
@@ -640,7 +640,7 @@ import { createServerClient, serializeCookieHeader } from '@supabase/ssr'
|
||||
export function createClient({ req, res }: GetServerSidePropsContext) {
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -668,7 +668,7 @@ import { createClient as createClientPrimitive } from '@supabase/supabase-js'
|
||||
export function createClient() {
|
||||
const supabase = createClientPrimitive(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
|
||||
return supabase
|
||||
@@ -681,7 +681,7 @@ import { createBrowserClient } from '@supabase/ssr'
|
||||
export function createClient() {
|
||||
const supabase = createBrowserClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
)
|
||||
|
||||
return supabase
|
||||
@@ -695,7 +695,7 @@ import { type NextApiRequest, type NextApiResponse } from 'next'
|
||||
export default function createClient(req: NextApiRequest, res: NextApiResponse) {
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
|
||||
@@ -31,7 +31,7 @@ npm install @supabase/supabase-js @supabase/ssr
|
||||
|
||||
Create a `.env.local` file in your project root directory.
|
||||
|
||||
Fill in your `PUBLIC_SUPABASE_URL` and `PUBLIC_SUPABASE_ANON_KEY`:
|
||||
Fill in your `PUBLIC_SUPABASE_URL` and `PUBLIC_SUPABASE_PUBLISHABLE_KEY`:
|
||||
|
||||
<ProjectConfigVariables variable="url" />
|
||||
<ProjectConfigVariables variable="anonKey" />
|
||||
@@ -44,7 +44,7 @@ Fill in your `PUBLIC_SUPABASE_URL` and `PUBLIC_SUPABASE_ANON_KEY`:
|
||||
|
||||
```txt name=.env.local
|
||||
PUBLIC_SUPABASE_URL=<your_supabase_project_url>
|
||||
PUBLIC_SUPABASE_ANON_KEY=<your_supabase_anon_key>
|
||||
PUBLIC_SUPABASE_PUBLISHABLE_KEY=<sb_publishable_... or anon keyY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -74,7 +74,7 @@ import { createServerClient } from '@supabase/ssr'
|
||||
import { type Handle, redirect } from '@sveltejs/kit'
|
||||
import { sequence } from '@sveltejs/kit/hooks'
|
||||
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
|
||||
const supabase: Handle = async ({ event, resolve }) => {
|
||||
/**
|
||||
@@ -82,7 +82,7 @@ const supabase: Handle = async ({ event, resolve }) => {
|
||||
*
|
||||
* The Supabase client gets the Auth token from the request cookies.
|
||||
*/
|
||||
event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
cookies: {
|
||||
getAll: () => event.cookies.getAll(),
|
||||
/**
|
||||
@@ -215,7 +215,7 @@ Create a Supabase client in your root `+layout.ts`. This client can be used to a
|
||||
|
||||
```ts name=src/routes/+layout.ts
|
||||
import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ssr'
|
||||
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
|
||||
import type { LayoutLoad } from './$types'
|
||||
|
||||
export const load: LayoutLoad = async ({ data, depends, fetch }) => {
|
||||
@@ -226,12 +226,12 @@ export const load: LayoutLoad = async ({ data, depends, fetch }) => {
|
||||
depends('supabase:auth')
|
||||
|
||||
const supabase = isBrowser()
|
||||
? createBrowserClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
? createBrowserClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
global: {
|
||||
fetch,
|
||||
},
|
||||
})
|
||||
: createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
|
||||
: createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
|
||||
global: {
|
||||
fetch,
|
||||
},
|
||||
|
||||
@@ -130,7 +130,7 @@ Because of this, the Supabase JavaScript libraries provide only limited support.
|
||||
```typescript
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('SUPABASE_URL', 'SUPABASE_ANON_KEY', {
|
||||
const supabase = createClient('SUPABASE_URL', 'SUPABASE_PUBLISHABLE_KEY', {
|
||||
auth: {
|
||||
storage: {
|
||||
getItem: () => {
|
||||
|
||||
@@ -63,7 +63,7 @@ Putting it all together, your client library initialization may look like this:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// ---cut---
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', {
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', {
|
||||
// ...
|
||||
auth: {
|
||||
// ...
|
||||
|
||||
@@ -18,7 +18,10 @@ Call the sign out method from the client library. It removes the active session
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
@@ -82,7 +85,10 @@ You can invoke these by providing the `scope` option:
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
// defaults to the global scope
|
||||
|
||||
@@ -43,7 +43,7 @@ When developing with Expo, you can test Sign in with Apple via the Expo Go app,
|
||||
|
||||
```ts
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
supabase.auth.signInWithOAuth({
|
||||
|
||||
@@ -150,7 +150,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithAzure() {
|
||||
@@ -210,7 +210,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
@@ -258,7 +258,7 @@ Azure OAuth2.0 doesn't return the `provider_refresh_token` by default. If you ne
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithAzure() {
|
||||
|
||||
@@ -61,7 +61,10 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signInWithBitbucket() {
|
||||
@@ -116,7 +119,10 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -78,7 +78,10 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signInWithDiscord() {
|
||||
@@ -135,7 +138,10 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -95,7 +95,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithFacebook() {
|
||||
@@ -170,7 +170,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -61,7 +61,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithFigma() {
|
||||
@@ -116,7 +116,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -73,7 +73,10 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signInWithGithub() {
|
||||
@@ -142,7 +145,10 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -58,7 +58,10 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signInWithGitLab() {
|
||||
@@ -113,7 +116,10 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -270,7 +270,7 @@ Google does not send out a refresh token by default, so you will need to pass pa
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient('https://your-project.supabase.co', 'sb_publishable_... or anon key')
|
||||
|
||||
// ---cut---
|
||||
const { data, error } = await supabase.auth.signInWithOAuth({
|
||||
|
||||
@@ -85,7 +85,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithKakao() {
|
||||
|
||||
@@ -76,7 +76,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithKeycloak() {
|
||||
@@ -158,7 +158,7 @@ When your user signs out, call [signOut()](/docs/reference/kotlin/auth-signout)
|
||||
|
||||
```kotlin
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>');
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>');
|
||||
|
||||
// ---cut---
|
||||
suspend fun signOut() {
|
||||
|
||||
@@ -81,7 +81,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithLinkedIn() {
|
||||
@@ -136,7 +136,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -61,7 +61,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithNotion() {
|
||||
@@ -116,7 +116,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -97,7 +97,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithSlack() {
|
||||
@@ -152,7 +152,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -91,7 +91,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithSpotify() {
|
||||
@@ -146,7 +146,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -76,7 +76,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithTwitch() {
|
||||
@@ -131,7 +131,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -85,7 +85,10 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signInWithTwitter() {
|
||||
@@ -140,7 +143,10 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://your-project-id.supabase.co', 'your-anon-key')
|
||||
const supabase = createClient(
|
||||
'https://your-project-id.supabase.co',
|
||||
'sb_publishable_... or anon key'
|
||||
)
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -73,7 +73,7 @@ When a user signs in, call `signInWithOAuth` with `workos` as the provider.
|
||||
|
||||
```javascript
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>');
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>');
|
||||
const redirect = (url: string) => {}
|
||||
|
||||
// ---cut---
|
||||
|
||||
@@ -92,7 +92,7 @@ When your user signs in, call [`signInWithOAuth()`](/docs/reference/javascript/a
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signInWithZoom() {
|
||||
@@ -147,7 +147,7 @@ When your user signs out, call [signOut()](/docs/reference/javascript/auth-signo
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('<your-project-url>', '<your-anon-key>')
|
||||
const supabase = createClient('<your-project-url>', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
async function signOut() {
|
||||
|
||||
@@ -31,16 +31,20 @@ const auth0 = new Auth0Client({
|
||||
},
|
||||
})
|
||||
|
||||
const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', {
|
||||
accessToken: async () => {
|
||||
const accessToken = await auth0.getTokenSilently()
|
||||
const supabase = createClient(
|
||||
'https://<supabase-project>.supabase.co',
|
||||
'SUPABASE_PUBLISHABLE_KEY',
|
||||
{
|
||||
accessToken: async () => {
|
||||
const accessToken = await auth0.getTokenSilently()
|
||||
|
||||
// Alternatively you can use (await auth0.getIdTokenClaims()).__raw to
|
||||
// use an ID token instead.
|
||||
// Alternatively you can use (await auth0.getIdTokenClaims()).__raw to
|
||||
// use an ID token instead.
|
||||
|
||||
return accessToken
|
||||
},
|
||||
})
|
||||
return accessToken
|
||||
},
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
@@ -57,7 +61,7 @@ extension CredentialsManager {
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://<supabase-project>.supabase.co")!,
|
||||
supabaseKey: "SUPABASE_ANON_KEY",
|
||||
supabaseKey: "SUPABASE_PUBLISHABLE_KEY",
|
||||
options: SupabaseClientOptions(
|
||||
auth: SupabaseClientOptions.AuthOptions(
|
||||
accessToken: {
|
||||
@@ -81,7 +85,7 @@ Future<void> main() async {
|
||||
final auth0 = Auth0('AUTH0_DOMAIN', 'AUTH0_CLIENT_ID');
|
||||
await Supabase.initialize(
|
||||
url: 'https://<supabase-project>.supabase.co',
|
||||
anonKey: 'SUPABASE_ANON_KEY',
|
||||
anonKey: 'SUPABASE_PUBLISHABLE_KEY',
|
||||
accessToken: () async {
|
||||
final credentials = await auth0.credentialsManager.credentials();
|
||||
return credentials.accessToken;
|
||||
@@ -100,7 +104,7 @@ import com.auth0.android.result.Credentials
|
||||
|
||||
val supabase = createSupabaseClient(
|
||||
"https://<supabase-project>.supabase.co",
|
||||
"SUPABASE_ANON_KEY"
|
||||
"SUPABASE_PUBLISHABLE_KEY"
|
||||
) {
|
||||
accessToken = {
|
||||
val credentials: Credentials = ...; // Get credentials from Auth0
|
||||
|
||||
@@ -22,14 +22,18 @@ Amazon Cognito User Pools (via AWS Amplify or on its own) can be used as a third
|
||||
```typescript
|
||||
import { fetchAuthSession, Hub } from 'aws-amplify/auth'
|
||||
|
||||
const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', {
|
||||
accessToken: async () => {
|
||||
const tokens = await fetchAuthSession()
|
||||
const supabase = createClient(
|
||||
'https://<supabase-project>.supabase.co',
|
||||
'SUPABASE_PUBLISHABLE_KEY',
|
||||
{
|
||||
accessToken: async () => {
|
||||
const tokens = await fetchAuthSession()
|
||||
|
||||
// Alternatively you can use tokens?.idToken instead.
|
||||
return tokens?.accessToken
|
||||
},
|
||||
})
|
||||
// Alternatively you can use tokens?.idToken instead.
|
||||
return tokens?.accessToken
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
// if you're using Realtime you also need to set up a listener for Cognito auth changes
|
||||
Hub.listen('auth', () => {
|
||||
@@ -49,7 +53,7 @@ struct UnexpectedAuthSessionError: Error {}
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://<supabase-project>.supabase.co")!,
|
||||
supabaseKey: "SUPABASE_ANON_KEY",
|
||||
supabaseKey: "SUPABASE_PUBLISHABLE_KEY",
|
||||
options: SupabaseClientOptions(
|
||||
auth: SupabaseClientOptions.AuthOptions(
|
||||
accessToken: {
|
||||
@@ -80,7 +84,7 @@ import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
Future<void> main() async {
|
||||
await Supabase.initialize(
|
||||
url: 'https://<supabase-project>.supabase.co',
|
||||
anonKey: 'SUPABASE_ANON_KEY',
|
||||
anonKey: 'SUPABASE_PUBLISHABLE_KEY',
|
||||
accessToken: () async {
|
||||
final session = await Amplify.Auth.fetchAuthSession();
|
||||
final cognitoSession = session as CognitoAuthSession;
|
||||
@@ -102,7 +106,7 @@ import com.amplifyframework.core.Amplify
|
||||
|
||||
val supabase = createSupabaseClient(
|
||||
"https://<supabase-project>.supabase.co",
|
||||
"SUPABASE_ANON_KEY"
|
||||
"SUPABASE_PUBLISHABLE_KEY"
|
||||
) {
|
||||
accessToken = {
|
||||
getAccessToken()
|
||||
|
||||
@@ -54,7 +54,7 @@ import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
await Supabase.initialize(
|
||||
url: 'SUPABASE_URL',
|
||||
anonKey: 'SUPABASE_ANON_KEY',
|
||||
anonKey: 'SUPABASE_PUBLISHABLE_KEY',
|
||||
accessToken: () async {
|
||||
final token = await ClerkAuth.of(context).sessionToken();
|
||||
return token.jwt;
|
||||
|
||||
@@ -25,11 +25,15 @@ Creating a client for the Web is as easy as passing the `accessToken` async func
|
||||
```typescript
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', {
|
||||
accessToken: async () => {
|
||||
return (await firebase.auth().currentUser?.getIdToken(/* forceRefresh */ false)) ?? null
|
||||
},
|
||||
})
|
||||
const supabase = createClient(
|
||||
'https://<supabase-project>.supabase.co',
|
||||
'SUPABASE_PUBLISHABLE_KEY',
|
||||
{
|
||||
accessToken: async () => {
|
||||
return (await firebase.auth().currentUser?.getIdToken(/* forceRefresh */ false)) ?? null
|
||||
},
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
Make sure the all users in your application have the `role: 'authenticated'` [custom claim](https://firebase.google.com/docs/auth/admin/custom-claims) set. If you're using the `onCreate` Cloud Function to add this custom claim to newly signed up users, you will need to call `getIdToken(/* forceRefresh */ true)` immediately after sign up as the `onCreate` function does not run synchronously.
|
||||
@@ -66,7 +70,7 @@ struct MissingFirebaseTokenError: Error {}
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://<supabase-project>.supabase.co")!,
|
||||
supabaseKey: "SUPABASE_ANON_KEY",
|
||||
supabaseKey: "SUPABASE_PUBLISHABLE_KEY",
|
||||
options: SupabaseClientOptions(
|
||||
auth: SupabaseClientOptions.AuthOptions(
|
||||
accessToken: {
|
||||
@@ -93,7 +97,7 @@ import com.google.firebase.ktx.Firebase
|
||||
|
||||
val supabase = createSupabaseClient(
|
||||
"https://<supabase-project>.supabase.co",
|
||||
"SUPABASE_ANON_KEY"
|
||||
"SUPABASE_PUBLISHABLE_KEY"
|
||||
) {
|
||||
accessToken = {
|
||||
Firebase.auth.currentUser?.getIdToken(false)?.await()?.token
|
||||
@@ -113,7 +117,7 @@ import dev.gitlive.firebase.auth.auth
|
||||
|
||||
val supabase = createSupabaseClient(
|
||||
"https://<supabase-project>.supabase.co",
|
||||
"SUPABASE_ANON_KEY"
|
||||
"SUPABASE_PUBLISHABLE_KEY"
|
||||
) {
|
||||
accessToken = {
|
||||
Firebase.auth.currentUser?.getIdToken(false)
|
||||
|
||||
@@ -26,11 +26,15 @@ const authkit = await createAuthKitClient('WORKOS_CLIENT_ID', {
|
||||
apiHostname: '<WORKOS_AUTH_DOMAIN>',
|
||||
})
|
||||
|
||||
const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', {
|
||||
accessToken: async () => {
|
||||
return authkit.getAccessToken()
|
||||
},
|
||||
})
|
||||
const supabase = createClient(
|
||||
'https://<supabase-project>.supabase.co',
|
||||
'SUPABASE_PUBLISHABLE_KEY',
|
||||
{
|
||||
accessToken: async () => {
|
||||
return authkit.getAccessToken()
|
||||
},
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
|
||||
@@ -25,7 +25,7 @@ import { createClient } from 'npm:@supabase/supabase-js@2'
|
||||
Deno.serve(async (req: Request) => {
|
||||
const supabaseClient = createClient(
|
||||
Deno.env.get('SUPABASE_URL') ?? '',
|
||||
Deno.env.get('SUPABASE_ANON_KEY') ?? '',
|
||||
Deno.env.get('SUPABASE_PUBLISHABLE_KEY') ?? '',
|
||||
// Create client with Auth context of the user that called the function.
|
||||
// This way your row-level-security (RLS) policies are applied.
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ Deno.serve(async (req) => {
|
||||
try {
|
||||
const supabase = createClient(
|
||||
Deno.env.get('SUPABASE_URL') ?? '',
|
||||
Deno.env.get('SUPABASE_ANON_KEY') ?? '',
|
||||
Deno.env.get('SUPABASE_PUBLISHABLE_KEY') ?? '',
|
||||
{ global: { headers: { Authorization: req.headers.get('Authorization')! } } }
|
||||
)
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ curl --request POST 'https://<project_id>.supabase.co/functions/v1/hello-world'
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Create a single supabase client for interacting with your database
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key')
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key')
|
||||
|
||||
const { data, error } = await supabase.functions.invoke('hello-world', {
|
||||
body: { name: 'Functions' },
|
||||
@@ -114,7 +114,7 @@ const { data, error } = await supabase.functions.invoke('hello-world', {
|
||||
|
||||
<Admonition type="note">
|
||||
|
||||
Note that the `SUPABASE_ANON_KEY` is different in development and production. To get your production anon key, you can find it in your Supabase dashboard under Settings > API.
|
||||
Note that the `SUPABASE_PUBLISHABLE_KEY` is different in development and production. To get your production anon key, you can find it in your Supabase dashboard under Settings > API.
|
||||
|
||||
</Admonition>
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ Open a new terminal and test your function with curl:
|
||||
|
||||
<Admonition type="tip">
|
||||
|
||||
**Need your `SUPABASE_ANON_KEY`?**
|
||||
**Need your `SUPABASE_PUBLISHABLE_KEY`?**
|
||||
|
||||
Run `supabase status` to see your local anon key and other credentials.
|
||||
|
||||
@@ -123,7 +123,7 @@ Run `supabase status` to see your local anon key and other credentials.
|
||||
|
||||
```bash
|
||||
curl -i --location --request POST 'http://localhost:54321/functions/v1/hello-world' \
|
||||
--header 'Authorization: Bearer SUPABASE_ANON_KEY' \
|
||||
--header 'Authorization: Bearer SUPABASE_PUBLISHABLE_KEY' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{"name":"Functions"}'
|
||||
```
|
||||
@@ -229,7 +229,7 @@ Now, you should have your Edge Function deployed and running globally at `https:
|
||||
|
||||
```bash
|
||||
curl --request POST 'https://[YOUR_PROJECT_ID].supabase.co/functions/v1/hello-world' \
|
||||
--header 'Authorization: Bearer SUPABASE_ANON_KEY' \
|
||||
--header 'Authorization: Bearer SUPABASE_PUBLISHABLE_KEY' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{"name":"Production"}'
|
||||
```
|
||||
@@ -242,7 +242,7 @@ curl --request POST 'https://[YOUR_PROJECT_ID].supabase.co/functions/v1/hello-wo
|
||||
|
||||
<Admonition type="note" label="Production vs Development Keys">
|
||||
|
||||
The `SUPABASE_ANON_KEY` is different in development and production. To get your production anon key, you can find it in your Supabase dashboard under **Settings > API**.
|
||||
The `SUPABASE_PUBLISHABLE_KEY` is different in development and production. To get your production anon key, you can find it in your Supabase dashboard under **Settings > API**.
|
||||
|
||||
</Admonition>
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Store `project_url` and `anon_key` in Supabase Vault:
|
||||
|
||||
```sql
|
||||
select vault.create_secret('https://project-ref.supabase.co', 'project_url');
|
||||
select vault.create_secret('YOUR_SUPABASE_ANON_KEY', 'anon_key');
|
||||
select vault.create_secret('YOUR_SUPABASE_PUBLISHABLE_KEY', 'publishable_key');
|
||||
```
|
||||
|
||||
Make a POST request to a Supabase Edge Function every minute:
|
||||
|
||||
@@ -10,7 +10,7 @@ subtitle: 'Manage sensitive data securely across environments.'
|
||||
Edge Functions have access to these secrets by default:
|
||||
|
||||
- `SUPABASE_URL`: The API gateway for your Supabase project
|
||||
- `SUPABASE_ANON_KEY`: The `anon` key for your Supabase API. This is safe to use in a browser when you have Row Level Security enabled
|
||||
- `SUPABASE_PUBLISHABLE_KEY`: The `publishable` key for your Supabase API. This is safe to use in a browser when you have Row Level Security enabled
|
||||
- `SUPABASE_SERVICE_ROLE_KEY`: The `service_role` key for your Supabase API. This is safe to use in Edge Functions, but it should NEVER be used in a browser. This key will bypass Row Level Security
|
||||
- `SUPABASE_DB_URL`: The URL for your Postgres database. You can use this to connect directly to your database
|
||||
|
||||
@@ -32,7 +32,7 @@ import { createClient } from 'npm:@supabase/supabase-js@2'
|
||||
// For user-facing operations (respects RLS)
|
||||
const supabase = createClient(
|
||||
Deno.env.get('SUPABASE_URL')!,
|
||||
Deno.env.get('SUPABASE_ANON_KEY')!
|
||||
Deno.env.get('SUPABASE_PUBLISHABLE_KEY')!
|
||||
)
|
||||
|
||||
// For admin operations (bypasses RLS)
|
||||
|
||||
@@ -48,7 +48,7 @@ import 'jsr:@std/dotenv/load'
|
||||
|
||||
// Set up the configuration for the Supabase client
|
||||
const supabaseUrl = Deno.env.get('SUPABASE_URL') ?? ''
|
||||
const supabaseKey = Deno.env.get('SUPABASE_ANON_KEY') ?? ''
|
||||
const supabaseKey = Deno.env.get('SUPABASE_PUBLISHABLE_KEY') ?? ''
|
||||
const options = {
|
||||
auth: {
|
||||
autoRefreshToken: false,
|
||||
@@ -146,8 +146,8 @@ To locally test and debug Edge Functions, you can utilize the Supabase CLI. Let'
|
||||
touch .env
|
||||
# adds the SUPABASE_URL secret
|
||||
echo "SUPABASE_URL=http://localhost:54321" >> .env
|
||||
# adds the SUPABASE_ANON_KEY secret
|
||||
echo "SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0" >> .env
|
||||
# adds the SUPABASE_PUBLISHABLE_KEY secret
|
||||
echo "SUPABASE_PUBLISHABLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0" >> .env
|
||||
# Alternatively, you can open it in your editor:
|
||||
open .env
|
||||
```
|
||||
|
||||
@@ -72,7 +72,7 @@ hideToc: true
|
||||
|
||||
await Supabase.initialize(
|
||||
url: 'YOUR_SUPABASE_URL',
|
||||
anonKey: 'YOUR_SUPABASE_ANON_KEY',
|
||||
anonKey: 'YOUR_SUPABASE_PUBLISHABLE_KEY',
|
||||
);
|
||||
runApp(MyApp());
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ hideToc: true
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "YOUR_SUPABASE_URL")!,
|
||||
supabaseKey: "YOUR_SUPABASE_ANON_KEY"
|
||||
supabaseKey: "YOUR_SUPABASE_PUBLISHABLE_KEY"
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -81,7 +81,7 @@ hideToc: true
|
||||
|
||||
return createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
|
||||
@@ -66,7 +66,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
```ts name=nuxt.config.tsx
|
||||
@@ -74,7 +74,7 @@ hideToc: true
|
||||
runtimeConfig: {
|
||||
public: {
|
||||
supabaseUrl: process.env.SUPABASE_URL,
|
||||
supabaseAnonKey: process.env.SUPABASE_ANON_KEY,
|
||||
supabaseAnonKey: process.env.SUPABASE_PUBLISHABLE_KEY,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -66,7 +66,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
VITE_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
VITE_SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -87,7 +87,7 @@ hideToc: true
|
||||
import { useEffect, useState } from "react";
|
||||
import { createClient } from "@supabase/supabase-js";
|
||||
|
||||
const supabase = createClient(import.meta.env.VITE_SUPABASE_URL, import.meta.env.VITE_SUPABASE_ANON_KEY);
|
||||
const supabase = createClient(import.meta.env.VITE_SUPABASE_URL, import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY);
|
||||
|
||||
function App() {
|
||||
const [instruments, setInstruments] = useState([]);
|
||||
|
||||
@@ -66,7 +66,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
VITE_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
VITE_SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -90,7 +90,7 @@ hideToc: true
|
||||
import { createClient } from "@supabase/supabase-js";
|
||||
import { createResource, For } from "solid-js";
|
||||
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>');
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>');
|
||||
|
||||
async function getInstruments() {
|
||||
const { data } = await supabase.from("instruments").select();
|
||||
|
||||
@@ -66,8 +66,8 @@ hideToc: true
|
||||
<$CodeTabs>
|
||||
|
||||
```text name=.env
|
||||
PUBLIC_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
PUBLIC_SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
VITE_PUBLIC_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -89,16 +89,16 @@ hideToc: true
|
||||
|
||||
```js name=src/lib/supabaseClient.js
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
import { VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY)
|
||||
export const supabase = createClient(VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY)
|
||||
```
|
||||
|
||||
```ts name=src/lib/supabaseClient.ts
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public';
|
||||
import { VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
|
||||
|
||||
export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY)
|
||||
export const supabase = createClient(VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY)
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
|
||||
@@ -66,7 +66,7 @@ hideToc: true
|
||||
|
||||
```text name=.env.local
|
||||
VITE_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
|
||||
VITE_SUPABASE_ANON_KEY=<SUBSTITUTE_SUPABASE_ANON_KEY>
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -88,7 +88,7 @@ hideToc: true
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
||||
```
|
||||
|
||||
@@ -58,7 +58,7 @@ These variables are safe to expose in your Expo app since Supabase has
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
|
||||
auth: {
|
||||
@@ -150,7 +150,7 @@ These variables are safe to expose in your Expo app since Supabase has
|
||||
}
|
||||
|
||||
const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
const supabase = createClient(supabaseUrl, supabaseAnonKey, {
|
||||
auth: {
|
||||
|
||||
@@ -155,7 +155,7 @@ import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
Future<void> main() async {
|
||||
await Supabase.initialize(
|
||||
url: 'YOUR_SUPABASE_URL',
|
||||
anonKey: 'YOUR_SUPABASE_ANON_KEY',
|
||||
anonKey: 'YOUR_SUPABASE_PUBLISHABLE_KEY',
|
||||
);
|
||||
runApp(const MyApp());
|
||||
}
|
||||
@@ -474,7 +474,7 @@ import 'package:supabase_quickstart/pages/login_page.dart';
|
||||
Future<void> main() async {
|
||||
await Supabase.initialize(
|
||||
url: 'YOUR_SUPABASE_URL',
|
||||
anonKey: 'YOUR_SUPABASE_ANON_KEY',
|
||||
anonKey: 'YOUR_SUPABASE_PUBLISHABLE_KEY',
|
||||
);
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -57,7 +57,7 @@ on the browser, and that's completely fine since we have [Row Level Security](/d
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL || ''
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY || ''
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY || ''
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
||||
```
|
||||
|
||||
@@ -43,7 +43,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -56,7 +56,7 @@ Now that we have the API credentials in place, let's create a helper file to ini
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL as string;
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY as string;
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY as string;
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey);
|
||||
```
|
||||
|
||||
@@ -36,7 +36,7 @@ Create or edit the `local.properties` file at the root (same level as `build.gra
|
||||
> **Note**: Do not commit this file to your source control, for example, by adding it to your `.gitignore` file!
|
||||
|
||||
```kotlin
|
||||
SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
```
|
||||
|
||||
@@ -56,7 +56,7 @@ defaultConfig {
|
||||
// Set value part
|
||||
Properties properties = new Properties()
|
||||
properties.load(project.rootProject.file("local.properties").newDataInputStream())
|
||||
buildConfigField("String", "SUPABASE_ANON_KEY", "\"${properties.getProperty("SUPABASE_ANON_KEY")}\"")
|
||||
buildConfigField("String", "SUPABASE_PUBLISHABLE_KEY", "\"${properties.getProperty("SUPABASE_PUBLISHABLE_KEY")}\"")
|
||||
buildConfigField("String", "SECRET", "\"${properties.getProperty("SECRET")}\"")
|
||||
buildConfigField("String", "SUPABASE_URL", "\"${properties.getProperty("SUPABASE_URL")}\"")
|
||||
}
|
||||
@@ -68,7 +68,7 @@ Read the value from `BuildConfig`:
|
||||
|
||||
```kotlin
|
||||
val url = BuildConfig.SUPABASE_URL
|
||||
val apiKey = BuildConfig.SUPABASE_ANON_KEY
|
||||
val apiKey = BuildConfig.SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
### Set up Supabase dependencies
|
||||
@@ -152,7 +152,7 @@ object SupabaseModule {
|
||||
fun provideSupabaseClient(): SupabaseClient {
|
||||
return createSupabaseClient(
|
||||
supabaseUrl = BuildConfig.SUPABASE_URL,
|
||||
supabaseKey = BuildConfig.SUPABASE_ANON_KEY
|
||||
supabaseKey = BuildConfig.SUPABASE_PUBLISHABLE_KEY
|
||||
) {
|
||||
install(Postgrest)
|
||||
install(Auth) {
|
||||
|
||||
@@ -58,7 +58,7 @@ Save the environment variables in a `.env.local` file at the root of the project
|
||||
|
||||
```bash .env.local
|
||||
NEXT_PUBLIC_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
### App styling (optional)
|
||||
@@ -108,7 +108,7 @@ export function createClient() {
|
||||
// Create a supabase client on the browser with project's credentials
|
||||
return createBrowserClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
)
|
||||
}
|
||||
```
|
||||
@@ -124,7 +124,7 @@ export async function createClient() {
|
||||
// which could be used to maintain user's session
|
||||
return createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -244,7 +244,7 @@ export async function updateSession(request) {
|
||||
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
|
||||
@@ -42,7 +42,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
SUPABASE_URL="YOUR_SUPABASE_URL"
|
||||
SUPABASE_KEY="YOUR_SUPABASE_ANON_KEY"
|
||||
SUPABASE_KEY="YOUR_SUPABASE_PUBLISHABLE_KEY"
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
|
||||
@@ -42,7 +42,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -58,7 +58,7 @@ Create and edit `src/supabaseClient.js`:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
||||
```
|
||||
|
||||
@@ -109,7 +109,7 @@ We need the `API URL` as well as the `anon` and `jwt_secret` keys that you copie
|
||||
|
||||
```bash name=.env
|
||||
SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
SUPABASE_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
SUPABASE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
SUPABASE_JWT_SECRET=YOUR_SUPABASE_JWT_SECRET
|
||||
```
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ We'll update it with environment variables managed by Vite:
|
||||
import { createClient } from '@refinedev/supabase'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabaseClient = createClient(supabaseUrl, supabaseAnonKey, {
|
||||
db: {
|
||||
@@ -91,7 +91,7 @@ And then, we want to save the environment variables in a `.env.local` file. All
|
||||
|
||||
```bash .env.local
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
The `supabaseClient` will be used in fetch calls to Supabase endpoints from our app. As we'll see below, the client is instrumental in implementing authentication using Refine's auth provider methods and CRUD actions with appropriate data provider methods.
|
||||
|
||||
@@ -41,7 +41,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -55,7 +55,7 @@ on the browser, and that's completely fine since we have [Row Level Security](/d
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
||||
```
|
||||
|
||||
@@ -42,7 +42,7 @@ All you need are the API URL and the `anon` key that you copied [earlier](#get-t
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
|
||||
@@ -42,7 +42,7 @@ All you need are the `PUBLIC_SUPABASE_URL` and the `PUBLIC_SUPABASE_ANON_KEY` ke
|
||||
|
||||
```bash name=.env
|
||||
PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL"
|
||||
PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_KEY"
|
||||
PUBLIC_SUPABASE_PUBLISHABLE_KEY="YOUR_SUPABASE_PUBLISHABLE_KEY"
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
|
||||
@@ -40,7 +40,7 @@ import Supabase
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "YOUR_SUPABASE_URL")!,
|
||||
supabaseKey: "YOUR_SUPABASE_ANON_KEY"
|
||||
supabaseKey: "YOUR_SUPABASE_PUBLISHABLE_KEY"
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ All we need are the API URL and the `anon` key that you copied [earlier](#get-th
|
||||
|
||||
```bash name=.env
|
||||
VITE_SUPABASE_URL=YOUR_SUPABASE_URL
|
||||
VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
|
||||
VITE_SUPABASE_PUBLISHABLE_KEY=YOUR_SUPABASE_PUBLISHABLE_KEY
|
||||
```
|
||||
|
||||
</$CodeTabs>
|
||||
@@ -61,7 +61,7 @@ on the browser, and that's completely fine since we have [Row Level Security](/d
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
||||
```
|
||||
|
||||
@@ -47,10 +47,10 @@ POSTGRES_HOST
|
||||
POSTGRES_PASSWORD
|
||||
POSTGRES_DATABASE
|
||||
SUPABASE_SERVICE_ROLE_KEY
|
||||
SUPABASE_ANON_KEY
|
||||
SUPABASE_PUBLISHABLE_KEY
|
||||
SUPABASE_URL
|
||||
SUPABASE_JWT_SECRET
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
||||
NEXT_PUBLIC_SUPABASE_URL
|
||||
```
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ describe('Todos RLS', () => {
|
||||
const USER_1_ID = crypto.randomUUID()
|
||||
const USER_2_ID = crypto.randomUUID()
|
||||
|
||||
const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!)
|
||||
const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLISHABLE_KEY!)
|
||||
|
||||
beforeAll(async () => {
|
||||
// Setup test data specific to this test suite
|
||||
|
||||
@@ -124,7 +124,7 @@ If you wish to use the new domain in client code, change the URL used in your Su
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Use a custom domain as the supabase URL
|
||||
const supabase = createClient('https://api.example.com', 'public-anon-key')
|
||||
const supabase = createClient('https://api.example.com', 'publishable-or-anon-key')
|
||||
```
|
||||
|
||||
Similarly, your Edge Functions will now be available at `https://api.example.com/functions/v1/your_function_name`, and your Storage objects at `https://api.example.com/storage/v1/object/public/your_file_path.ext`.
|
||||
@@ -202,7 +202,7 @@ If you wish to use the new domain in client code, you can set it up like so:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Use a custom domain as the supabase URL
|
||||
const supabase = createClient('https://my-example-brand.supabase.co', 'public-anon-key')
|
||||
const supabase = createClient('https://my-example-brand.supabase.co', 'publishable-or-anon-key')
|
||||
```
|
||||
|
||||
When using [Sign in with Twitter](/docs/guides/auth/social-login/auth-twitter) make sure your frontend code is using the subdomain only.
|
||||
|
||||
@@ -27,7 +27,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const SUPABASE_URL = 'https://<project>.supabase.co'
|
||||
const SUPABASE_KEY = '<your-anon-key>'
|
||||
const SUPABASE_KEY = '<sb_publishable_... or anon key>'
|
||||
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
|
||||
```
|
||||
@@ -41,7 +41,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
void main() async {
|
||||
Supabase.initialize(
|
||||
url: 'https://<project>.supabase.co',
|
||||
anonKey: '<your-anon-key>',
|
||||
anonKey: '<sb_publishable_... or anon key>',
|
||||
);
|
||||
runApp(MyApp());
|
||||
}
|
||||
@@ -56,7 +56,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
import Supabase
|
||||
|
||||
let SUPABASE_URL = "https://<project>.supabase.co"
|
||||
let SUPABASE_KEY = "<your-anon-key>"
|
||||
let SUPABASE_KEY = "<sb_publishable_... or anon key>"
|
||||
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: SUPABASE_URL)!, supabaseKey: SUPABASE_KEY)
|
||||
```
|
||||
@@ -66,7 +66,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
|
||||
```kotlin
|
||||
val supabaseUrl = "https://<project>.supabase.co"
|
||||
val supabaseKey = "<your-anon-key>"
|
||||
val supabaseKey = "<sb_publishable_... or anon key>"
|
||||
val supabase = createSupabaseClient(supabaseUrl, supabaseKey) {
|
||||
install(Realtime)
|
||||
}
|
||||
@@ -80,7 +80,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
from supabase import acreate_client
|
||||
|
||||
URL = "https://<project>.supabase.co"
|
||||
KEY = "<your-anon-key>"
|
||||
KEY = "<sb_publishable_... or anon key>"
|
||||
|
||||
async def create_supabase():
|
||||
supabase = await acreate_client(URL, KEY)
|
||||
@@ -107,7 +107,7 @@ You can provide a callback for the `broadcast` channel to receive messages. This
|
||||
```js
|
||||
// @noImplicitAny: false
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
|
||||
// ---cut---
|
||||
// Join a room/topic. Can be anything except for 'realtime'.
|
||||
|
||||
@@ -21,7 +21,7 @@ When you initialize your Supabase Realtime client, you define a `topic` that uni
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
|
||||
const roomOne = supabase.channel('room-one') // set your topic here
|
||||
```
|
||||
@@ -34,7 +34,7 @@ By default, channels are public and you need to set that you want to use a priva
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
const roomOne = supabase.channel('private-room-one', { config: { private: true } })
|
||||
```
|
||||
|
||||
@@ -44,7 +44,7 @@ Realtime Broadcast follows the [publish-subscribe pattern](https://en.wikipedia.
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
const roomOne = supabase.channel('room-one') // set your topic here
|
||||
|
||||
// ---cut---
|
||||
@@ -67,7 +67,7 @@ Presence can be used to share an individual's state with others within a Channel
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const supabase = createClient('https://<project>.supabase.co', '<sb_publishable_... or anon key>')
|
||||
const roomOne = supabase.channel('room-one') // set your topic here
|
||||
|
||||
// ---cut---
|
||||
|
||||
@@ -139,7 +139,7 @@ In this example we'll set up a database table, secure it with Row Level Security
|
||||
|
||||
const supabase = createClient(
|
||||
'https://<project>.supabase.co',
|
||||
'<your-anon-key>'
|
||||
'<sb_publishable_... or anon key>'
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ Go to your Supabase project's [API Settings](https://supabase.com/dashboard/proj
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const SUPABASE_URL = 'https://<project>.supabase.co'
|
||||
const SUPABASE_KEY = '<your-anon-key>'
|
||||
const SUPABASE_KEY = '<sb_publishable_... or anon key>'
|
||||
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
|
||||
```
|
||||
@@ -39,7 +39,7 @@ const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
|
||||
void main() {
|
||||
Supabase.initialize(
|
||||
url: 'https://<project>.supabase.co',
|
||||
anonKey: '<your-anon-key>',
|
||||
anonKey: '<sb_publishable_... or anon key>',
|
||||
);
|
||||
|
||||
runApp(MyApp());
|
||||
@@ -53,7 +53,7 @@ final supabase = Supabase.instance.client;
|
||||
|
||||
```swift
|
||||
let supabaseURL = "https://<project>.supabase.co"
|
||||
let supabaseKey = "<your-anon-key>"
|
||||
let supabaseKey = "<sb_publishable_... or anon key>"
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: supabaseURL)!, supabaseKey: supabaseKey)
|
||||
|
||||
let realtime = supabase.realtime
|
||||
@@ -64,7 +64,7 @@ let realtime = supabase.realtime
|
||||
|
||||
```kotlin
|
||||
val supabaseUrl = "https://<project>.supabase.co"
|
||||
val supabaseKey = "<your-anon-key>"
|
||||
val supabaseKey = "<sb_publishable_... or anon key>"
|
||||
val supabase = createSupabaseClient(supabaseUrl, supabaseKey) {
|
||||
install(Realtime)
|
||||
}
|
||||
@@ -77,7 +77,7 @@ val supabase = createSupabaseClient(supabaseUrl, supabaseKey) {
|
||||
from supabase import create_client
|
||||
|
||||
SUPABASE_URL = 'https://<project>.supabase.co'
|
||||
SUPABASE_KEY = '<your-anon-key>'
|
||||
SUPABASE_KEY = '<sb_publishable_... or anon key>'
|
||||
|
||||
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
|
||||
```
|
||||
@@ -397,7 +397,7 @@ By default, Presence will generate a unique `UUIDv1` key on the server to track
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('SUPABASE_URL', 'SUPABASE_ANON_KEY')
|
||||
const supabase = createClient('SUPABASE_URL', 'SUPABASE_PUBLISHABLE_KEY')
|
||||
|
||||
const channelC = supabase.channel('test', {
|
||||
config: {
|
||||
|
||||
@@ -227,7 +227,7 @@ const options = {
|
||||
},
|
||||
},
|
||||
}
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options)
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', options)
|
||||
```
|
||||
|
||||
## Logs Explorer
|
||||
|
||||
@@ -32,7 +32,7 @@ import { createBrowserClient } from '@supabase/ssr';
|
||||
export function createClient() {
|
||||
return createBrowserClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
|
||||
);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ export function createClient() {
|
||||
|
||||
return createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
@@ -78,7 +78,7 @@ export async function updateSession(request: NextRequest) {
|
||||
|
||||
const supabase = createServerClient(
|
||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!,
|
||||
{
|
||||
cookies: {
|
||||
getAll() {
|
||||
|
||||
@@ -33,7 +33,7 @@ functions:
|
||||
Future<void> main() async {
|
||||
await Supabase.initialize(
|
||||
url: 'https://xyzcompany.supabase.co',
|
||||
anonKey: 'public-anon-key',
|
||||
anonKey: 'publishable-or-anon-key',
|
||||
);
|
||||
|
||||
runApp(MyApp());
|
||||
@@ -48,7 +48,7 @@ functions:
|
||||
```dart
|
||||
final supabase = SupabaseClient(
|
||||
'https://xyzcompany.supabase.co',
|
||||
'public-anon-key',
|
||||
'publishable-or-anon-key',
|
||||
);
|
||||
```
|
||||
- id: sign-up
|
||||
|
||||
@@ -90,7 +90,7 @@ functions:
|
||||
Future<void> main() async {
|
||||
await Supabase.initialize(
|
||||
url: 'https://xyzcompany.supabase.co',
|
||||
anonKey: 'public-anon-key',
|
||||
anonKey: 'publishable-or-anon-key',
|
||||
);
|
||||
|
||||
runApp(MyApp());
|
||||
@@ -105,7 +105,7 @@ functions:
|
||||
```dart
|
||||
final supabase = SupabaseClient(
|
||||
'https://xyzcompany.supabase.co',
|
||||
'public-anon-key',
|
||||
'publishable-or-anon-key',
|
||||
);
|
||||
```
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ functions:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Create a single supabase client for interacting with your database
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key')
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key')
|
||||
```
|
||||
- id: with-additional-parameters
|
||||
name: With Additional Parameters
|
||||
@@ -42,7 +42,7 @@ functions:
|
||||
persistSession: true,
|
||||
detectSessionInUrl: true,
|
||||
}
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options)
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', options)
|
||||
```
|
||||
- id: api-schemas
|
||||
name: API schemas
|
||||
@@ -57,7 +57,7 @@ functions:
|
||||
persistSession: true,
|
||||
detectSessionInUrl: true,
|
||||
}
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options)
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', options)
|
||||
```
|
||||
description: |
|
||||
By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard.
|
||||
@@ -70,7 +70,7 @@ functions:
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', {
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', {
|
||||
fetch: fetch.bind(globalThis),
|
||||
})
|
||||
```
|
||||
@@ -330,7 +330,7 @@ functions:
|
||||
const { access_token } = req.get('X-Supabase-Auth')
|
||||
|
||||
// You can now use it within a Supabase Client
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key")
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "publishable-or-anon-key")
|
||||
const { user, error } = supabase.auth.setAuth(access_token)
|
||||
|
||||
// This client will now send requests as this user
|
||||
@@ -368,7 +368,7 @@ functions:
|
||||
const { access_token } = req.get('X-Supabase-Auth')
|
||||
|
||||
// You can now use it within a Supabase Client
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key")
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "publishable-or-anon-key")
|
||||
const { user, error } = supabase.auth.setAuth(access_token)
|
||||
|
||||
// This client will now send requests as this user
|
||||
|
||||
@@ -32,7 +32,7 @@ functions:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Create a single supabase client for interacting with your database
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key')
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key')
|
||||
```
|
||||
- id: with-custom-domain
|
||||
name: With a custom domain
|
||||
@@ -41,7 +41,7 @@ functions:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// Use a custom domain as the supabase URL
|
||||
const supabase = createClient('https://my-custom-domain.com', 'public-anon-key')
|
||||
const supabase = createClient('https://my-custom-domain.com', 'publishable-or-anon-key')
|
||||
```
|
||||
- id: with-additional-parameters
|
||||
name: With additional parameters
|
||||
@@ -62,7 +62,7 @@ functions:
|
||||
headers: { 'x-my-custom-header': 'my-app-name' },
|
||||
},
|
||||
}
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key", options)
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "publishable-or-anon-key", options)
|
||||
```
|
||||
- id: api-schemas
|
||||
name: With custom schemas
|
||||
@@ -70,7 +70,7 @@ functions:
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', {
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', {
|
||||
// Provide a custom schema. Defaults to "public".
|
||||
db: { schema: 'other_schema' }
|
||||
})
|
||||
@@ -86,7 +86,7 @@ functions:
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', {
|
||||
const supabase = createClient('https://xyzcompany.supabase.co', 'publishable-or-anon-key', {
|
||||
global: { fetch: fetch.bind(globalThis) }
|
||||
})
|
||||
```
|
||||
@@ -102,7 +102,7 @@ functions:
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key", {
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "publishable-or-anon-key", {
|
||||
auth: {
|
||||
storage: AsyncStorage,
|
||||
autoRefreshToken: true,
|
||||
@@ -170,7 +170,7 @@ functions:
|
||||
}
|
||||
}
|
||||
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key", {
|
||||
const supabase = createClient("https://xyzcompany.supabase.co", "publishable-or-anon-key", {
|
||||
auth: {
|
||||
storage: new LargeSecureStore(),
|
||||
autoRefreshToken: true,
|
||||
|
||||
@@ -85,7 +85,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(GoTrue)
|
||||
install(Postgrest)
|
||||
@@ -98,7 +98,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(GoTrue) {
|
||||
alwaysAutoRefresh = false // default: true
|
||||
@@ -155,7 +155,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Postgrest) {
|
||||
defaultSchema = "schema" // default: "public"
|
||||
@@ -177,7 +177,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Storage) {
|
||||
transferTimeout = 90.seconds // Default: 120 seconds
|
||||
@@ -204,7 +204,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Realtime) {
|
||||
reconnectDelay = 5.seconds // Default: 7 seconds
|
||||
@@ -231,7 +231,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Functions) {
|
||||
//no custom settings
|
||||
@@ -248,7 +248,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(GraphQL) {
|
||||
apolloConfiguration {
|
||||
@@ -2086,7 +2086,7 @@ functions:
|
||||
isSpotlight: true
|
||||
code: |
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(supabaseURL = "https://xyzcompany.supabase.co'", supabaseKey = "public-anon-key") { ... }
|
||||
val supabase = createSupabaseClient(supabaseURL = "https://xyzcompany.supabase.co'", supabaseKey = "publishable-or-anon-key") { ... }
|
||||
val gotrue = supabase.gotrue
|
||||
```
|
||||
- id: sign-up
|
||||
|
||||
@@ -127,7 +127,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Auth)
|
||||
install(Postgrest)
|
||||
@@ -140,7 +140,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Auth) {
|
||||
alwaysAutoRefresh = false // default: true
|
||||
@@ -197,7 +197,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Postgrest) {
|
||||
defaultSchema = "schema" // default: "public"
|
||||
@@ -219,7 +219,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Storage) {
|
||||
transferTimeout = 90.seconds // Default: 120 seconds
|
||||
@@ -246,7 +246,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Realtime) {
|
||||
reconnectDelay = 5.seconds // Default: 7 seconds
|
||||
@@ -273,7 +273,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Functions) {
|
||||
//no custom settings
|
||||
@@ -290,7 +290,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(GraphQL) {
|
||||
apolloConfiguration {
|
||||
@@ -2816,7 +2816,7 @@ functions:
|
||||
isSpotlight: true
|
||||
code: |
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(supabaseURL = "https://xyzcompany.supabase.co'", supabaseKey = "public-anon-key") { ... }
|
||||
val supabase = createSupabaseClient(supabaseURL = "https://xyzcompany.supabase.co'", supabaseKey = "publishable-or-anon-key") { ... }
|
||||
val auth = supabase.auth
|
||||
```
|
||||
- id: sign-up
|
||||
|
||||
@@ -127,7 +127,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Auth)
|
||||
install(Postgrest)
|
||||
@@ -140,7 +140,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Auth) {
|
||||
alwaysAutoRefresh = false // default: true
|
||||
@@ -197,7 +197,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Postgrest) {
|
||||
defaultSchema = "schema" // default: "public"
|
||||
@@ -219,7 +219,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Storage) {
|
||||
transferTimeout = 90.seconds // Default: 120 seconds
|
||||
@@ -246,7 +246,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Realtime) {
|
||||
reconnectDelay = 5.seconds // Default: 7 seconds
|
||||
@@ -273,7 +273,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(Functions) {
|
||||
//no custom settings
|
||||
@@ -290,7 +290,7 @@ functions:
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(
|
||||
supabaseUrl = "https://xyzcompany.supabase.co",
|
||||
supabaseKey = "public-anon-key"
|
||||
supabaseKey = "publishable-or-anon-key"
|
||||
) {
|
||||
install(GraphQL) {
|
||||
apolloConfiguration {
|
||||
@@ -2883,7 +2883,7 @@ functions:
|
||||
isSpotlight: true
|
||||
code: |
|
||||
```kotlin
|
||||
val supabase = createSupabaseClient(supabaseUrl = "https://xyzcompany.supabase.co'", supabaseKey = "public-anon-key") { ... }
|
||||
val supabase = createSupabaseClient(supabaseUrl = "https://xyzcompany.supabase.co'", supabaseKey = "publishable-or-anon-key") { ... }
|
||||
val auth = supabase.auth
|
||||
```
|
||||
- id: sign-up
|
||||
|
||||
@@ -25,7 +25,7 @@ functions:
|
||||
name: Initialize Client
|
||||
code: |
|
||||
```swift
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key")
|
||||
let client = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "publishable-or-anon-key")
|
||||
```
|
||||
- id: initialize-client-custom-options
|
||||
name: Initialize Client with custom options
|
||||
@@ -33,7 +33,7 @@ functions:
|
||||
```swift
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: SupabaseClientOptions(
|
||||
db: .init(
|
||||
schema: "public"
|
||||
@@ -59,7 +59,7 @@ functions:
|
||||
isSpotlight: true
|
||||
code: |
|
||||
```swift
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key")
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "publishable-or-anon-key")
|
||||
let auth = supabase.auth
|
||||
```
|
||||
- id: create-auth-client-with-custom-storage
|
||||
@@ -69,7 +69,7 @@ functions:
|
||||
```swift
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: .init(
|
||||
auth: .init(
|
||||
MyCustomLocalStorage()
|
||||
|
||||
@@ -27,7 +27,7 @@ functions:
|
||||
```swift
|
||||
import Supabase
|
||||
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key")
|
||||
let client = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "publishable-or-anon-key")
|
||||
```
|
||||
- id: initialize-client-custom-options
|
||||
name: Initialize Client with custom options
|
||||
@@ -37,7 +37,7 @@ functions:
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: SupabaseClientOptions(
|
||||
db: .init(
|
||||
schema: "public"
|
||||
@@ -67,7 +67,7 @@ functions:
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: SupabaseClientOptions(
|
||||
global: SupabaseClientOptions.GlobalOptions(
|
||||
logger: AppLogger()
|
||||
@@ -83,7 +83,7 @@ functions:
|
||||
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: SupabaseClientOptions(
|
||||
db: .init(
|
||||
// Provide a custom schema. Defaults to "public".
|
||||
@@ -155,7 +155,7 @@ functions:
|
||||
isSpotlight: true
|
||||
code: |
|
||||
```swift
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "public-anon-key")
|
||||
let supabase = SupabaseClient(supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, supabaseKey: "publishable-or-anon-key")
|
||||
let auth = supabase.auth
|
||||
```
|
||||
- id: create-auth-client-with-custom-storage
|
||||
@@ -165,7 +165,7 @@ functions:
|
||||
```swift
|
||||
let supabase = SupabaseClient(
|
||||
supabaseURL: URL(string: "https://xyzcompany.supabase.co")!,
|
||||
supabaseKey: "public-anon-key",
|
||||
supabaseKey: "publishable-or-anon-key",
|
||||
options: .init(
|
||||
auth: .init(
|
||||
MyCustomLocalStorage()
|
||||
|
||||
@@ -24,7 +24,7 @@ export const supabaseMiddleware = (): MiddlewareHandler => {
|
||||
const supabaseEnv = env<SupabaseEnv>(c);
|
||||
const supabaseUrl =
|
||||
supabaseEnv.VITE_SUPABASE_URL ?? import.meta.env.VITE_SUPABASE_URL;
|
||||
const supabaseAnonKey =
|
||||
const supabasePublishableKey =
|
||||
supabaseEnv.VITE_SUPABASE_ANON_KEY ??
|
||||
import.meta.env.VITE_SUPABASE_ANON_KEY;
|
||||
|
||||
@@ -32,11 +32,11 @@ export const supabaseMiddleware = (): MiddlewareHandler => {
|
||||
throw new Error('SUPABASE_URL missing!');
|
||||
}
|
||||
|
||||
if (!supabaseAnonKey) {
|
||||
if (!supabasePublishableKey) {
|
||||
throw new Error('SUPABASE_ANON_KEY missing!');
|
||||
}
|
||||
|
||||
const supabase = createServerClient(supabaseUrl, supabaseAnonKey, {
|
||||
const supabase = createServerClient(supabaseUrl, supabasePublishableKey, {
|
||||
cookies: {
|
||||
getAll() {
|
||||
return parseCookieHeader(c.req.header('Cookie') ?? '');
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Update these with your Supabase details from your project settings > API
|
||||
# https://app.supabase.com/project/_/settings/api
|
||||
NEXT_PUBLIC_SUPABASE_URL=your-project-url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user