mirror of
https://github.com/supabase/supabase.git
synced 2026-10-14 21:59:16 +03:00
* Update Environment Variables docs * Update Dependencies docs * Add Function Configuration d ocs * Add custom Configuration section in Navigation * Add Error Handling section * Add new HTTP Methods section * Update Deno 2 Guide * Update nav * Rm deno2 nav * Update Deploy section * Update CI/CD section * Update Logging * Update Testing * Update Local Debugging * Update Troubleshooting * Update Nav * Update CLI Quickstart * Update Dashboard Quickstart * Update Development Environment * Update Nav * Fix links * Update apps/docs/content/guides/functions/quickstart-dashboard.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/development-environment.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/development-environment.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/quickstart.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Use $CodeSample for multi-root example * Use tocVideo instead of video embed * Rm typo * Switch Quickstart ordering * Rephrase Docker requirement for deployment * Add Project Structure section * style: fix docs lint issues * Update Regional Invocations * Update Error Handing * Fix linting * Fixes * Remove duplicate sections * Update Auth integration * Update Storage * Update Database/Postgres * Update Nav * Update Background Tasks * Update Ephemeral Storage * Update Websockets * Update Routing * Update wasm * Update AI models * Fix linting issues * Update apps/docs/content/guides/functions/ai-models.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/ai-models.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/ai-models.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/storage-caching.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/websockets.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/websockets.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update apps/docs/content/guides/functions/ai-models.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Rm unnecessary lines * Rm wrong example * Fix typo * Rm deno2 * Move CICD to deployment and rename routing * Fix whitespace * rm unnecessary spelling --------- Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
97 lines
2.6 KiB
Plaintext
97 lines
2.6 KiB
Plaintext
---
|
|
id: 'auth'
|
|
title: 'Integrating With Supabase Auth'
|
|
description: 'Supabase Edge Functions and Auth.'
|
|
subtitle: 'Integrate Supabase Auth with Edge Functions'
|
|
---
|
|
|
|
Edge Functions work seamlessly with [Supabase Auth](/docs/guides/auth).
|
|
|
|
This allows you to:
|
|
|
|
- Automatically identify users through JWT tokens
|
|
- Enforce Row Level Security policies
|
|
- Seamlessly integrate with your existing auth flow
|
|
|
|
---
|
|
|
|
## Setting up auth context
|
|
|
|
When a user makes a request to an Edge Function, you can use the `Authorization` header to set the Auth context in the Supabase client and enforce Row Level Security policies.
|
|
|
|
```js
|
|
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') ?? '',
|
|
// Create client with Auth context of the user that called the function.
|
|
// This way your row-level-security (RLS) policies are applied.
|
|
{
|
|
global: {
|
|
headers: { Authorization: req.headers.get('Authorization')! },
|
|
},
|
|
}
|
|
);
|
|
|
|
//...
|
|
})
|
|
```
|
|
|
|
<Admonition type="note">
|
|
|
|
Importantly, this is done _inside_ the `Deno.serve()` callback argument, so that the `Authorization` header is set for each individual request!
|
|
|
|
</Admonition>
|
|
|
|
---
|
|
|
|
## Fetching the user
|
|
|
|
By getting the JWT from the `Authorization` header, you can provide the token to `getUser()` to fetch the user object to obtain metadata for the logged in user.
|
|
|
|
```js
|
|
Deno.serve(async (req: Request) => {
|
|
// ...
|
|
const authHeader = req.headers.get('Authorization')!
|
|
const token = authHeader.replace('Bearer ', '')
|
|
const { data } = await supabaseClient.auth.getUser(token)
|
|
// ...
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## Row Level Security
|
|
|
|
After initializing a Supabase client with the Auth context, all queries will be executed with the context of the user. For database queries, this means [Row Level Security](/docs/guides/database/postgres/row-level-security) will be enforced.
|
|
|
|
```js
|
|
import { createClient } from 'npm:@supabase/supabase-js@2'
|
|
|
|
Deno.serve(async (req: Request) => {
|
|
// ...
|
|
// This query respects RLS - users only see rows they have access to
|
|
const { data, error } = await supabaseClient.from('profiles').select('*');
|
|
|
|
if (error) {
|
|
return new Response('Database error', { status: 500 })
|
|
}
|
|
|
|
// ...
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## Example
|
|
|
|
See the full [example on GitHub](https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts).
|
|
|
|
<$CodeSample
|
|
path="/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts"
|
|
title="Select from table with auth RLS"
|
|
language="typescript"
|
|
/>
|