mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
328 lines
8.8 KiB
Plaintext
328 lines
8.8 KiB
Plaintext
import Layout from '~/layouts/DefaultGuideLayout'
|
|
|
|
export const meta = {
|
|
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) and the Auth UI package:
|
|
|
|
```bash
|
|
npm install @supabase/supabase-js @supabase/auth-ui-react @supabase/auth-ui-shared
|
|
```
|
|
|
|
### 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.
|
|
|
|
```js lines=4,16 title=/src/index.js
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
import {
|
|
// Import predefined theme
|
|
ThemeSupa,
|
|
} from '@supabase/auth-ui-shared'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
{/* Apply predefined theme */}
|
|
appearance={{ theme: ThemeSupa }}
|
|
/>
|
|
)
|
|
```
|
|
|
|
### Social Providers
|
|
|
|
The Auth component also supports login with [official social providers](../../auth#providers).
|
|
|
|
```js lines=13 title=/src/index.js
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
import { ThemeSupa } from '@supabase/auth-ui-shared'
|
|
|
|
const supabase = createClient('<INSERT PROJECT URL>', '<INSERT PROJECT ANON API KEY>')
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{ theme: ThemeSupa }}
|
|
providers={['google', 'facebook', 'twitter']}
|
|
/>
|
|
)
|
|
```
|
|
|
|
### Supported Views
|
|
|
|
The Auth component is currently shipped with the following views:
|
|
|
|
- [Email Login](../auth-email)
|
|
- [Magic Link login](../auth-magic-link)
|
|
- [Social Login](../social-login)
|
|
- Update password
|
|
- Forgotten password
|
|
|
|
We are planning on adding more views in the future. Follow along on that [repo](https://github.com/supabase/auth-ui).
|
|
|
|
## 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 lines=2,13 title=/src/index.js
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
import { ThemeSupa } from '@supabase/auth-ui-shared'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
{/* Apply predefined theme */}
|
|
appearance={{ theme: ThemeSupa }}
|
|
/>
|
|
)
|
|
```
|
|
|
|
<Admonition type="info">
|
|
|
|
Currently there is only one predefined theme available, but we plan to add more.
|
|
|
|
</Admonition>
|
|
|
|
### Switch theme variations
|
|
|
|
Auth UI comes with two theme variations: `default` and `dark`. You can switch between these themes with the `theme` prop.
|
|
|
|
```js lines=14 title=/src/index.js
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
import { ThemeSupa } from '@supabase/auth-ui-shared'
|
|
|
|
const supabase = createClient(
|
|
'<INSERT PROJECT URL>',
|
|
'<INSERT PROJECT ANON API KEY>'
|
|
)
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{ theme: ThemeSupa }}
|
|
{/* Set theme to dark */}
|
|
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/auth-ui/blob/main/packages/shared/src/theming/Themes.ts).
|
|
|
|
```js lines=14-21 title=/src/index.js
|
|
import { createClient } from '@supabase/supabase-js'
|
|
import { Auth } from '@supabase/auth-ui-react'
|
|
import { ThemeSupa } from '@supabase/auth-ui-shared'
|
|
|
|
const supabase = createClient('<INSERT PROJECT URL>', '<INSERT PROJECT ANON API KEY>')
|
|
|
|
const App = () => (
|
|
<Auth
|
|
supabaseClient={supabase}
|
|
appearance={{
|
|
theme: ThemeSupa,
|
|
variables: {
|
|
default: {
|
|
colors: {
|
|
brand: 'red',
|
|
brandAccent: 'darkred',
|
|
},
|
|
},
|
|
},
|
|
}}
|
|
/>
|
|
)
|
|
```
|
|
|
|
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/auth-ui/blob/main/packages/shared/src/theming/Themes.ts).
|
|
|
|
```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/auth-ui/blob/main/packages/shared/src/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
|
|
/>
|
|
)
|
|
```
|
|
|
|
export const Page = ({ children }) => <Layout meta={meta} children={children} />
|
|
|
|
export default Page
|