diff --git a/web/docs/guides/auth.mdx b/web/docs/guides/auth.mdx index 9415ba64aac..624b0e8210f 100644 --- a/web/docs/guides/auth.mdx +++ b/web/docs/guides/auth.mdx @@ -39,7 +39,7 @@ We currently support the following OAuth providers:
{providers.map((x) => ( -
+
{x.logo && {x.name}} diff --git a/web/docs/guides/auth/auth-messagebird.mdx b/web/docs/guides/auth/auth-messagebird.mdx new file mode 100644 index 00000000000..45b51c4a19b --- /dev/null +++ b/web/docs/guides/auth/auth-messagebird.mdx @@ -0,0 +1,283 @@ +--- +id: auth-messagebird +title: Phone Auth with MessageBird +description: How to set up and use Mobile OTP with MessageBird and Supabase. +--- + +import ExtensionsComponent from '../../../../web/src/components/Extensions' +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +## Overview + +In this guide we'll show you how to authenticate your users with SMS based OTP (One-Time Password) tokens. + +There are two reasons to use Supabase SMS OTP tokens: + +- You want users to log in with mobile + password, and the mobile should be verified via SMS +- You want users to log in with mobile ONLY (i.e. passwordless login) + +We'll cover: + +- [Finding your MessageBird credentials](#finding-your-messagebird-credentials) +- [Using OTP with password based logins](#using-otp-with-password-based-logins) +- [Using OTP as a passwordless sign-in mechanism](#using-otp-as-a-passwordless-sign-in-mechanism) + +What you'll need: + +- A MessageBird account (sign up here: https://dashboard.messagebird.com/en/sign-up) +- A Supabase project (create one here: https://app.supabase.io) +- A mobile phone capable of receiving SMS + +## Steps + +### Finding your MessageBird credentials + +Start by logging into your MessageBird account and verify the mobile number you'll be using to test with: https://dashboard.messagebird.com/en/getting-started/sms + +This is the number that will be receiving the SMS OTPs. + +![Verify your own phone number](/img/guides/auth-messagebird/1.png) + +![Get your API Keys](/img/guides/auth-messagebird/2.png) + +Navigate to the [dashboard settings](https://dashboard.messagebird.com/en/settings/sms) to set the default originator. The messagebird originator is the name or number from which the message is sent. +For more information, you can refer to the messagebird article on choosing an originator [here](https://support.messagebird.com/hc/en-us/articles/115002628665-Choosing-an-originator) + +![Set the default originator](/img/guides/auth-messagebird/3.png) + +You will need the following values to get started: + +- Live API Key / Test API Key +- MessageBird originator + +Now go to the Auth > Settings page in the Supabase dashboard (https://app.supabase.io/project/YOUR-PROJECT-REF/auth/settings). + +You should see an option to enable Phone Signup. + +![Enable Phone Sign-Up](/img/guides/auth-twilio/7.png) + +Toggle it on, and copy the 2 values over from the messagebird dashboard. Click save. + +Note: If you use the Test API Key, the OTP will not be delivered to the mobile number specified but messagebird will log the response in the dashboard. +If the Live API Key is used instead, the OTP will be delivered and there will be a deduction in your free credits. + + +Plug in MessageBird credentials + +Now the backend should be setup, we can proceed to adding our client-side code! + +#### SMS custom template + +The SMS message sent to a phone containing an OTP code can be customized. This is useful if you need to mention a brand name or display a website address. + +Go to Auth > Templates page in the Supabase dashboard (https://app.supabase.io/project/YOUR-PROJECT-REF/auth/templates). + +Use the variable `.Code` in the template to display the code. + +### Using OTP with password based logins + +In this use scenario we'll be using the user's mobile phone number as an alternative to an email address when signing up along with a password. You may want to think hard about the permanency of this however. It is not uncommon for mobile phone numbers to be recycled by phone networks when users cancel their phone contracts or move countries, therefore granting access to the user's account to whomever takes over the phone number in the future. Soon we'll add multi-factor auth, which will mitigate this risk, but for now you may want to give some thought to allowing your users to recover their account by some other means in an emergency. + +Using supabase-js on the client you'll want to use the same `signUp` method that you'd use for email based sign ups, but with the `phone` param instead of the `email param`: + + + + +```js +let { user, error } = await supabase.auth.signUp({ + phone: '+13334445555', + password: 'some-password', +}) +``` + + + + +```bash +curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/signup' \ +-H "apikey: SUPABASE_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "phone": "+13334445555", + "password": "some-password" +}' +``` + + + + +The user will now receive an SMS with a 6-digit pin that you will need to receive from them within 60-seconds before they can login to their account. + +You should present a form to the user so they can input the 6 digit pin, then send it along with the phone number to `verifyOTP`: + + + + +```js +let { session, error } = await supabase.auth.verifyOTP({ + phone: '+13334445555', + token: '123456', +}) +``` + + + + +```bash +curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ +-H "apikey: SUPABASE_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "type": "sms", + "phone": "+13334445555", + "token": "123456" +}' +``` + + + + +If successful the user will now be logged in and you should receive a valid session like: + +```json +{ + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", + "token_type": "bearer", + "expires_in": 3600, + "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" +} +``` + +The access token can be sent in the Authorization header as a Bearer token for any CRUD operations on supabase-js. See our guide on [Row Level Security](https://supabase.io/docs/guides/auth#row-level-security) for more info on restricting access on a user basis. + +Also now that the mobile has been verified, the user can use the number and password to sign in without needing to verify their number each time: + + + + +```js +let { user, error } = await supabase.auth.signIn({ + phone: '+13334445555', + password: 'some-password', +}) +``` + + + + +```bash +curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/token?grant_type=password' \ +-H "apikey: SUPABASE_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "phone": "+13334445555", + "password": "some-password" +}' +``` + + + + +### Using OTP as a passwordless sign-in mechanism + +In this scenario you are granting your user's the ability to login to their account without needing to set a password on their account, all they have to do to log in is verify their mobile each time using the OTP. + +In javascript we can use the `signIn` method with a single parameter: `phone` + + + + +```js +let { user, error } = await supabase.auth.signIn({ + phone: '+13334445555', +}) +``` + + + + +```bash +curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/otp' \ +-H "apikey: SUPABASE_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "phone": "+13334445555" +}' +``` + + + + +the second step is the same as the previous section, you need to collect the 6-digit pin from the user and pass it along with their phone number to the verify method: + + + + +```js +let { session, error } = await supabase.auth.verifyOTP({ + phone: '+13334445555', + token: '123456', +}) +``` + + + + +```bash +curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ +-H "apikey: SUPABASE_KEY" \ +-H "Content-Type: application/json" \ +-d '{ + "type": "sms", + "phone": "+13334445555", + "token": "123456" +}' +``` + + + + +and the response should also be the same as above: + +```json +{ + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", + "token_type": "bearer", + "expires_in": 3600, + "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" +} +``` + +The user does not have a password therefore will need to sign in via this method each time they want to access your service. + +## Resources + +- [MessageBird Signup](https://dashboard.messagebird.com/en/sign-up) +- [Supabase Dashboard](https://app.supabase.io) +- [Supabase Row Level Security](https://supabase.io/docs/guides/auth#row-level-security) diff --git a/web/docs/guides/auth/auth-slack.mdx b/web/docs/guides/auth/auth-slack.mdx new file mode 100644 index 00000000000..485ef767f59 --- /dev/null +++ b/web/docs/guides/auth/auth-slack.mdx @@ -0,0 +1,111 @@ +--- +id: auth-slack +title: "Login with Slack" +description: Add Slack OAuth to your Supabase project +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +To enable Slack Auth for your project, you need to set up a Slack OAuth application and add the application credentials to your Supabase Dashboard. + +## Overview + +Setting up Slack logins for your application consists of 3 parts: + +* Create and configure a Slack Project and App on the [Slack Developer Dashboard](https://api.slack.com/apps). +* Add your Slack `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.io). +* Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). + +## Steps + +### Access your Slack Developer account + +- Go to [api.slack.com](https://api.slack.com/apps). +- Click on `Your Apps` at the top right to log in. + +![Slack Developer Portal.](/img/guides/slack-portal.png) + +### Find your callback URL + +The next step requires a callback URL, which looks like this: + +`https://.supabase.co/auth/v1/callback` + +- Go to your [Supabase Project Dashboard](https://supabase.io). +- Click on the `Settings` icon at the bottom of the left sidebar. +- Click on `API` in the list. +- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard. +- Now just add `/auth/v1/callback` to the end of that to get your full `OAuth Redirect URI`. + + + +### Create a Slack OAuth app + +- Go to [api.slack.com](https://api.slack.com/apps). +- Click on `Create an App` + +Under `Create an app...`: + +- Click `From scratch` +- Type the name of your app +- Select your `Slack Workspace` +- Click `Create App` + +Under `App Credentials`: + +- Copy and save your newly-generted `Client ID` +- Copy and save your newly-generate `Client Secret` +- Click `Permissions` + +Under `Redirect URLs`: + +- Click `Add New Redirect URL` +- Paste your `Callback URL` then click `Add` +- Click `Save URLs` + +### Enter your Slack credentials into your Supabase Project + +- Go to your [Supabase Project Dashboard](https://supabase.io). +- In the left sidebar, click the `Authentication` icon (near the top). +- Click `Settings` from the list to go to the `Authentication Settings` page. +- Enter the final (hosted) URL of your app under `Site URL` (this is important). +- Under `External OAuth Providers` turn `Slack Enabled` to ON. +- Enter your `API Key` (`client_id`) and `API Secret Key` (`client_secret`) saved in the previous step. +- Click `Save`. + +### Add login code to your client app + +The JavaScript client code is documented here: [Supabase OAuth Client Code](https://supabase.io/docs/reference/javascript/auth-signin#sign-in-using-third-party-providers). + +```js +const { user, session, error } = await supabase.auth.signIn({ + provider: 'slack' +}) +``` + +Add this function which you can call from a button, link, or UI element. + +```js +async function signInWithSlack() { + const { user, session, error } = await supabase.auth.signIn({ + provider: 'slack' + }); +} +``` + +To log out: + +```js +async function signout() { + const { error } = await supabase.auth.signOut(); +} +``` + +## Resources + +* [Supabase Account - Free Tier OK](https://supabase.io) +* [Supabase JS Client](https://github.com/supabase/supabase-js) +* [Slack Developer Dashboard](https://api.slack.com/apps) \ No newline at end of file diff --git a/web/docs/guides/auth/auth-spotify.mdx b/web/docs/guides/auth/auth-spotify.mdx new file mode 100644 index 00000000000..1e586a80a57 --- /dev/null +++ b/web/docs/guides/auth/auth-spotify.mdx @@ -0,0 +1,106 @@ +--- +id: auth-spotify +title: "Login with Spotify" +description: Add Spotify OAuth to your Supabase project +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +To enable Spotify Auth for your project, you need to set up a Spotify OAuth application and add the application credentials to your Supabase Dashboard. + +## Overview + +Setting up Spotify logins for your application consists of 3 parts: + +* Create and configure a Spotify Project and App on the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/). +* Add your Spotify `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.io). +* Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). + +## Steps + +### Access your Spotify Developer account + +- Log into [Spotify](https://spotify.com) +- Access the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) + +![Spotify Developer Portal.](/img/guides/spotify-portal.png) + +### Find your callback URL + +The next step requires a callback URL, which looks like this: + +`https://.supabase.co/auth/v1/callback` + +- Go to your [Supabase Project Dashboard](https://supabase.io). +- Click on the `Settings` icon at the bottom of the left sidebar. +- Click on `API` in the list. +- Under Config / URL you'll find your API URL, you can click `Copy` to copy it to the clipboard. +- Now just add `/auth/v1/callback` to the end of that to get your full `OAuth Redirect URI`. + + + +### Create a Spotify OAuth app + +- Log into [Spotify](https://spotify.com). +- Go to the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) +- Click `Create an App` +- Type your `App name` +- Type your `App description` +- Check the box to agree with the `Developer TOS and Branding Guidelines` +- Click `Create` +- Save your `Client ID` +- Save your `Client Secret` +- Click `Edit Settings` + +Under `Redirect URIs`: + +- Paste your Supabase Callback URL in the box +- Click `Add` +- Click `Save` at the bottom + +### Enter your Spotify credentials into your Supabase Project + +- Go to your [Supabase Project Dashboard](https://supabase.io). +- In the left sidebar, click the `Authentication` icon (near the top). +- Click `Settings` from the list to go to the `Authentication Settings` page. +- Enter the final (hosted) URL of your app under `Site URL` (this is important). +- Under `External OAuth Providers` turn `Spotify Enabled` to ON. +- Enter your `API Key` (`client_id`) and `API Secret Key` (`client_secret`) saved in the previous step. +- Click `Save`. + +### Add login code to your client app + +The JavaScript client code is documented here: [Supabase OAuth Client Code](https://supabase.io/docs/reference/javascript/auth-signin#sign-in-using-third-party-providers). + +```js +const { user, session, error } = await supabase.auth.signIn({ + provider: 'spotify' +}) +``` + +Add this function which you can call from a button, link, or UI element. + +```js +async function signInWithSpotify() { + const { user, session, error } = await supabase.auth.signIn({ + provider: 'spotify' + }); +} +``` + +To log out: + +```js +async function signout() { + const { error } = await supabase.auth.signOut(); +} +``` + +## Resources + +* [Supabase Account - Free Tier OK](https://supabase.io) +* [Supabase JS Client](https://github.com/supabase/supabase-js) +* [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/) \ No newline at end of file diff --git a/web/docs/guides/auth/intro.mdx b/web/docs/guides/auth/intro.mdx index cc53cbf71de..104a5359024 100644 --- a/web/docs/guides/auth/intro.mdx +++ b/web/docs/guides/auth/intro.mdx @@ -40,7 +40,7 @@ You can authenticate your users in several ways:
{providers.map((x) => ( -
+
@@ -62,7 +62,7 @@ You can authenticate your users in several ways: {x.platform.toString()}
- Hosted: + Self-Hosted: {x.selfHosted.toString()}
diff --git a/web/sidebar_spec_supabase.js b/web/sidebar_spec_supabase.js index 15771bf0d1c..400d75a2d11 100644 --- a/web/sidebar_spec_supabase.js +++ b/web/sidebar_spec_supabase.js @@ -9,7 +9,13 @@ module.exports = { { type: 'category', label: 'Auth', - items: ['reference/javascript/auth-signup', 'reference/javascript/auth-signin', 'reference/javascript/auth-signout', 'reference/javascript/auth-session', 'reference/javascript/auth-user', 'reference/javascript/auth-update', 'reference/javascript/auth-setauth', 'reference/javascript/auth-onauthstatechange', 'reference/javascript/reset-password-email', 'reference/javascript/delete-user'], + items: ['reference/javascript/auth-signup', 'reference/javascript/auth-signin', 'reference/javascript/auth-signout', 'reference/javascript/auth-session', 'reference/javascript/auth-user', 'reference/javascript/auth-update', 'reference/javascript/auth-setauth', 'reference/javascript/auth-onauthstatechange', 'reference/javascript/reset-password-email'], + collapsed: true, + }, + { + type: 'category', + label: 'Auth (Server Only)', + items: ['reference/javascript/auth-api-deleteuser', 'reference/javascript/auth-api-generatelink', 'reference/javascript/auth-api-inviteuserbyemail', 'reference/javascript/auth-api-sendmobileotp', 'reference/javascript/auth-api-resetpasswordforemail'], collapsed: true, }, { diff --git a/web/sidebars.js b/web/sidebars.js index bdeaad781d4..989216efa68 100755 --- a/web/sidebars.js +++ b/web/sidebars.js @@ -152,9 +152,12 @@ module.exports = { 'guides/auth/auth-github', 'guides/auth/auth-gitlab', 'guides/auth/auth-google', + 'guides/auth/auth-slack', + 'guides/auth/auth-spotify', 'guides/auth/auth-twitter', 'guides/auth/auth-twitch', 'guides/auth/auth-twilio', + 'guides/auth/auth-messagebird', ], }, { diff --git a/web/spec/supabase.yml b/web/spec/supabase.yml index 2e996ce3b98..f5bc3cdc6f0 100644 --- a/web/spec/supabase.yml +++ b/web/spec/supabase.yml @@ -40,7 +40,13 @@ info: - auth.setAuth() - auth.onAuthStateChange() - Reset Password (Email) - - Delete User + - name: 'Auth (Server Only)' + items: + - auth.api.deleteUser() + - auth.api.generateLink() + - auth.api.inviteUserByEmail() + - auth.api.sendMobileOTP() + - auth.api.resetPasswordForEmail() - name: 'Database' items: - select() @@ -309,6 +315,7 @@ pages: ``` auth.signUp(): + title: 'signUp()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.signUp' notes: | - By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.io](https://app.supabase.io) @@ -348,6 +355,7 @@ pages: You can sign up with OAuth providers using the [`signIn()`](/docs/reference/javascript/auth-signin#sign-in-using-third-party-providers) method. auth.signIn(): + title: 'signIn()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.signIn' notes: | - A user can sign up either via email or OAuth. @@ -427,6 +435,7 @@ pages: ``` auth.signOut(): + title: 'signOut()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.signOut' examples: - name: Sign out @@ -437,6 +446,7 @@ pages: ``` auth.session(): + title: 'session()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.session' examples: - name: Get the session data @@ -447,6 +457,7 @@ pages: ``` auth.user(): + title: 'user()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.user' examples: - name: Get the logged in user @@ -457,6 +468,7 @@ pages: ``` auth.update(): + title: 'update()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.update' notes: | User email: email updates will send an email to both the user's current and new email with a confirmation link. @@ -487,6 +499,7 @@ pages: ``` auth.setAuth(): + title: 'setAuth()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.setAuth' examples: - name: Basic example. @@ -545,6 +558,7 @@ pages: ``` auth.onAuthStateChange(): + title: 'onAuthStateChange()' $ref: '@supabase/gotrue-js."GoTrueClient".GoTrueClient.onAuthStateChange' examples: - name: Listen to auth changes @@ -578,11 +592,16 @@ pages: isSpotlight: true js: | ```js - const { data, error } = supabase.auth.api.resetPasswordForEmail('user@email.com') + const { data, error } = supabase.auth.api + .resetPasswordForEmail('user@email.com') ``` - Delete User: + auth.api.deleteUser(): + title: 'deleteUser()' $ref: '@supabase/gotrue-js."GoTrueApi".GoTrueApi.deleteUser' + notes: | + - Requires a `service_role` key. + - This function should only be called on a server. Never expose your `service_role` key in the browser. examples: - name: Remove a user completely. isSpotlight: true @@ -594,6 +613,71 @@ pages: ) ``` + auth.api.inviteUserByEmail(): + title: 'inviteUserByEmail()' + $ref: '@supabase/gotrue-js."GoTrueApi".GoTrueApi.inviteUserByEmail' + notes: | + - Requires a `service_role` key. + - This function should only be called on a server. Never expose your `service_role` key in the browser. + examples: + - name: Basic example. + isSpotlight: false + js: | + ```js + const { user, error } = await supabase.auth + .api + .inviteUserByEmail('email@example.com') + ``` + + auth.api.sendMobileOTP(): + title: 'sendMobileOTP()' + $ref: '@supabase/gotrue-js."GoTrueApi".GoTrueApi.sendMobileOTP' + notes: | + - Requires a `service_role` key. + - This function should only be called on a server. Never expose your `service_role` key in the browser. + examples: + - name: Basic example. + isSpotlight: false + js: | + ```js + const { user, error } = await supabase.auth + .api + .sendMobileOTP('12345879') + ``` + + auth.api.resetPasswordForEmail(): + title: 'resetPasswordForEmail()' + $ref: '@supabase/gotrue-js."GoTrueApi".GoTrueApi.resetPasswordForEmail' + notes: | + - Requires a `service_role` key. + - This function should only be called on a server. Never expose your `service_role` key in the browser. + examples: + - name: Basic example. + isSpotlight: false + js: | + ```js + const { user, error } = await supabase.auth + .api + .resetPasswordForEmail('email@example.com') + ``` + + auth.api.generateLink(): + title: 'generateLink()' + $ref: '@supabase/gotrue-js."GoTrueApi".GoTrueApi.generateLink' + notes: | + - Requires a `service_role` key. + - This function should only be called on a server. Never expose your `service_role` key in the browser. + examples: + - name: Generate invite link. + isSpotlight: false + js: | + ```js + const { user, error } = await supabase.auth.api.generateLink({ + type: 'invite', + email: 'email@example.com' + }) + ``` + select(): title: 'Fetch data: select()' $ref: '@supabase/postgrest-js."lib/PostgrestQueryBuilder".PostgrestQueryBuilder.select' diff --git a/web/src/data/authProviders.js b/web/src/data/authProviders.js index 870c02cf368..0dce4ab7758 100644 --- a/web/src/data/authProviders.js +++ b/web/src/data/authProviders.js @@ -89,15 +89,33 @@ const authProviders = [ platform: true, selfHosted: true, }, - // { - // name: 'MessageBird', - // // logo: '/img/libraries/dart-icon.svg', - // href: '/docs/guides/auth/auth-twilio', - // official: false, - // supporter: 'Messagebird', - // platform: false, - // selfHosted: true, - // }, + { + name: 'MessageBird', + // logo: '/img/libraries/dart-icon.svg', + href: '/docs/guides/auth/auth-messagebird', + official: false, + supporter: 'MessageBird', + platform: true, + selfHosted: true, + }, + { + name: 'Slack', + // logo: '/img/libraries/dart-icon.svg', + href: '/docs/guides/auth/auth-slack', + official: true, + supporter: 'Supabase', + platform: true, + selfHosted: true, + }, + { + name: 'Spotify', + // logo: '/img/libraries/dart-icon.svg', + href: '/docs/guides/auth/auth-spotify', + official: true, + supporter: 'Supabase', + platform: true, + selfHosted: true, + }, { name: 'Twitter', // logo: '/img/libraries/dart-icon.svg', diff --git a/web/static/img/guides/auth-messagebird/1.png b/web/static/img/guides/auth-messagebird/1.png new file mode 100644 index 00000000000..0ff2ea855f2 Binary files /dev/null and b/web/static/img/guides/auth-messagebird/1.png differ diff --git a/web/static/img/guides/auth-messagebird/2.png b/web/static/img/guides/auth-messagebird/2.png new file mode 100644 index 00000000000..de9c1459499 Binary files /dev/null and b/web/static/img/guides/auth-messagebird/2.png differ diff --git a/web/static/img/guides/auth-messagebird/3.png b/web/static/img/guides/auth-messagebird/3.png new file mode 100644 index 00000000000..d46c759873a Binary files /dev/null and b/web/static/img/guides/auth-messagebird/3.png differ diff --git a/web/static/img/guides/slack-portal.png b/web/static/img/guides/slack-portal.png new file mode 100644 index 00000000000..88e07529b26 Binary files /dev/null and b/web/static/img/guides/slack-portal.png differ diff --git a/web/static/img/guides/spotify-portal.png b/web/static/img/guides/spotify-portal.png new file mode 100644 index 00000000000..9a13fa2625b Binary files /dev/null and b/web/static/img/guides/spotify-portal.png differ diff --git a/www/next.config.js b/www/next.config.js index 2fda24a68a2..bc2631ceced 100644 --- a/www/next.config.js +++ b/www/next.config.js @@ -585,6 +585,11 @@ module.exports = withMDX({ source: '/docs/guides/self-hosting', destination: '/docs/guides/hosting/overview', }, + { + permanent: true, + source: '/docs/reference/javascript/delete-user', + destination: '/docs/reference/javascript/auth-api-deleteuser', + }, ] }, }) diff --git a/www/pages/auth/Auth.tsx b/www/pages/auth/Auth.tsx index 6dad55d3318..c13777bcb99 100644 --- a/www/pages/auth/Auth.tsx +++ b/www/pages/auth/Auth.tsx @@ -66,7 +66,7 @@ function AuthPage() { h1={[ Open Source Auth -
(without the integrations) +
(with tons of integrations)
, ]} subheader={[