mirror of
https://github.com/supabase/supabase.git
synced 2026-07-05 09:05:10 +08:00
298 lines
7.6 KiB
Plaintext
298 lines
7.6 KiB
Plaintext
---
|
|
id: auth-ui
|
|
title: Auth UI
|
|
description: A prebuilt, customizable React component for authenticating users.
|
|
---
|
|
|
|
Auth UI is a pre-built React component for authenticating users.
|
|
It supports custom themes and extensible styles to match your brand and aesthetic.
|
|
|
|
<video width="99%" muted playsInline controls="true">
|
|
<source
|
|
src="https://supabase.com/images/blog/lw5-one-more/auth-ui-demo.mp4"
|
|
type="video/mp4"
|
|
muted
|
|
playsInline
|
|
/>
|
|
</video>
|
|
|
|
## Set up Auth UI
|
|
|
|
Install the latest version of [supabase-js](/docs/reference/javascript/next/) and the Auth UI package:
|
|
|
|
```bash
|
|
npm install @supabase/supabase-js@rc @supabase/auth-ui-react
|
|
```
|
|
|
|
### Import the Auth component
|
|
|
|
Pass `supabaseClient` from `@supabase/supabase-js` as a prop to the component.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => <Auth supabaseClient={supabase} />
|
|
```
|
|
|
|
This renders the Auth component without any styling.
|
|
We recommend using one of the predefined themes to style the UI.
|
|
Import the theme you want to use and pass it to the `appearence.theme` prop.
|
|
|
|
```diff js title="/src/index.js"
|
|
import {
|
|
Auth,
|
|
// highlight-next-line
|
|
ThemeSupa
|
|
} from '@supabase/auth-ui-react'
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
// highlight-next-line
|
|
appearance={{ theme: ThemeSupa }}
|
|
/>
|
|
)
|
|
```
|
|
|
|
## Customization
|
|
|
|
There are several ways to customize Auth UI:
|
|
|
|
- Use one of the [predefined themes](#predefined-themes) that comes with Auth UI
|
|
- Extend a theme by [overriding the variable tokens](#override-themes) in a theme
|
|
- [Create your own theme](#create-theme)
|
|
- [Use your own CSS classes](#custom-css-classes)
|
|
- [Use inline styles](#custom-inline-styles)
|
|
- [Use your own labels](#custom-labels)
|
|
|
|
### Predefined themes
|
|
|
|
Auth UI comes with several themes to customize the appearance. Each predefined theme comes with at least two variations, a `default` variation, and a `dark` variation. You can switch between these themes using the `theme` prop. Import the theme you want to use and pass it to the `appearence.theme` prop.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
//highlight-next-line
|
|
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
// highlight-next-line
|
|
appearance={{ theme: ThemeSupa }}
|
|
/>
|
|
)
|
|
```
|
|
|
|
:::info
|
|
Currently there is only one predefined theme available, but we plan to add more.
|
|
:::
|
|
|
|
### Switch theme variations
|
|
|
|
Auth UI comes with two theme variations: `default` and `dark`. You can switch between these themes with the `theme` prop.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{ theme: ThemeSupa }}
|
|
// highlight-next-line
|
|
theme="dark"
|
|
/>
|
|
)
|
|
```
|
|
|
|
If you don't pass a value to `theme` it uses the `"default"` theme. You can pass `"dark"` to the theme prop to switch to the `dark` theme. If your theme has other variations, use the name of the variation in this prop.
|
|
|
|
### Override themes
|
|
|
|
Auth UI themes can be overridden using variable tokens. See the [list of variable tokens](https://github.com/supabase-community/auth-ui/blob/main/packages/react/common/theming/Themes.tsx).
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{
|
|
theme: ThemeSupa,
|
|
// highlight-start
|
|
variables: {
|
|
default: {
|
|
colors: {
|
|
brand: 'red',
|
|
brandAccent: 'darkred',
|
|
},
|
|
},
|
|
},
|
|
// highlight-end
|
|
}}
|
|
/>
|
|
)
|
|
```
|
|
|
|
If you created your own theme, you may not need to override any of the them.
|
|
|
|
### Create your own theme {#create-theme}
|
|
|
|
You can create your own theme by following the same structure within a `appearance.theme` property.
|
|
See the list of [tokens within a theme](https://github.com/supabase-community/auth-ui/blob/main/packages/react/common/theming/Themes.tsx).
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const customTheme = {
|
|
default: {
|
|
colors: {
|
|
brand: 'hsl(153 60.0% 53.0%)',
|
|
brandAccent: 'hsl(154 54.8% 45.1%)',
|
|
brandButtonText: 'white',
|
|
// ..
|
|
},
|
|
dark: {
|
|
colors: {
|
|
brandButtonText: 'white',
|
|
defaultButtonBackground: '#2e2e2e',
|
|
defaultButtonBackgroundHover: '#3e3e3e',
|
|
//..
|
|
},
|
|
},
|
|
// You can also add more theme variations with different names.
|
|
evenDarker: {
|
|
colors: {
|
|
brandButtonText: 'white',
|
|
defaultButtonBackground: '#1e1e1e',
|
|
defaultButtonBackgroundHover: '#2e2e2e',
|
|
//..
|
|
},
|
|
},
|
|
}
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
theme="default" // can also be "dark" or "evenDarker"
|
|
appearance={{ theme: customTheme}}
|
|
/>
|
|
)
|
|
```
|
|
|
|
You can swich between different variations of your theme with the ["theme" prop](#switch-theme-variations).
|
|
|
|
### Custom CSS classes {#custom-css-classes}
|
|
|
|
You can use custom CSS classes for the following elements:
|
|
`"button"`, `"container"`, `"anchor"`, `"divider"`, `"label"`, `"input"`, `"loader"`, `"message"`.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{
|
|
className: {
|
|
anchor: 'my-awesome-anchor',
|
|
button: 'my-awesome-button',
|
|
//..
|
|
},
|
|
}}
|
|
/>
|
|
)
|
|
```
|
|
|
|
### Custom inline CSS {#custom-inline-styles}
|
|
|
|
You can use custom CSS inline styles for the following elements:
|
|
`"button"`, `"container"`, `"anchor"`, `"divider"`, `"label"`, `"input"`, `"loader"`, `"message"`.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{
|
|
style: {
|
|
button: { background: 'red', color: 'white' },
|
|
anchor: { color: 'blue' },
|
|
//..
|
|
},
|
|
}}
|
|
/>
|
|
)
|
|
```
|
|
|
|
### Custom labels {#custom-labels}
|
|
|
|
You can use custom labels with `localization.variables`. See the [list of labels](https://github.com/supabase-community/auth-ui/blob/main/packages/react/common/lib/Localization/en.json) that can be overwritten.
|
|
|
|
```js title="/src/index.js"
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
//highlight-start
|
|
localization={{
|
|
variables: {
|
|
sign_in: {
|
|
email_label: 'Your email address',
|
|
password_label: 'Your strong password',
|
|
},
|
|
},
|
|
}}
|
|
//highlight-end
|
|
/>
|
|
)
|
|
```
|