import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import CodeSnippet from './CodeSnippet' import { DocSection } from './DocSection' import Snippets from './Snippets' import { InlineLink } from '@/components/ui/InlineLink' import { useAPIKeys } from '@/data/api-keys/api-keys-query' import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' interface AuthenticationProps { selectedLang: 'bash' | 'js' showApiKey: string } const Authentication = ({ selectedLang, showApiKey }: AuthenticationProps) => { const { ref: projectRef } = useParams() const { can: canReadAPIKeys } = useAsyncCheckPermissions(PermissionAction.SECRETS_READ, '*') const { data: apiKeyData } = useAPIKeys({ projectRef }, { enabled: canReadAPIKeys }) const { anonKey, serviceKey } = apiKeyData ?? {} const { data: settings } = useProjectSettingsV2Query({ projectRef }) const protocol = settings?.app_config?.protocol ?? 'https' const hostEndpoint = settings?.app_config?.endpoint const endpoint = `${protocol}://${hostEndpoint ?? ''}` // [Joshen] ShowApiKey should really be a boolean, its confusing const defaultApiKey = showApiKey !== 'SUPABASE_KEY' ? (anonKey?.api_key ?? 'SUPABASE_CLIENT_API_KEY') : 'SUPABASE_CLIENT_API_KEY' const serviceApiKey = showApiKey !== 'SUPABASE_KEY' ? (serviceKey?.api_key ?? 'SUPABASE_SERVICE_KEY') : 'SUPABASE_SERVICE_KEY' return (

Supabase works through a mixture of JWT and Key auth.

If no Authorization header is included, the API will assume that you are making a request with an anonymous user.

If an Authorization header is included, the API will "switch" to the role of the user making the request. See the User Management section for more details.

We recommend setting your keys as Environment Variables.

} />

Client keys allow "anonymous access" to your database, until the user has logged in. After logging in the keys will switch to the user's own login token.

In this documentation, we will refer to the key using the name{' '} SUPABASE_KEY.

We have provided you a Client Key to get started. You will soon be able to add as many keys as you like. You can find the anon key in the{' '} API Keys Settings {' '} page.

} snippets={ <> } />

Service keys have FULL access to your data, bypassing any security policies. Be VERY careful where you expose these keys. They should only be used on a server and never on a client or browser.

In this documentation, we will refer to the key using the name{' '} SERVICE_KEY.

We have provided you with a Service Key to get started. Soon you will be able to add as many keys as you like. You can find the service_role in the{' '} API Keys Settings {' '} page.

} snippets={ <> } />
) } export default Authentication