mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 17:35:10 +03:00
Merge branch 'master' into patch-12
This commit is contained in:
9 files changed
+206
-45
No files matched your search
+108
-10
@@ -61,17 +61,115 @@ Supabase 是一个[托管平台](https://app.supabase.io)。你可以注册并
|
||||
|
||||
我们的客户库是模块化的。每一个子库都是一个独立的实现,用于一个单一的外部系统。这是我们支持现有工具的方式之一。
|
||||
|
||||
- **`supabase-{lang}`**:组合客户端库并对其进行增强。
|
||||
- `postgrest-{lang}`:与 [PostgREST](https://github.com/postgrest/postgrest) 交互的客户端库
|
||||
- `realtime-{lang}`:与 [Realtime](https://github.com/supabase/realtime) 交互的客户端库
|
||||
- `gotrue-{lang}`:与 [GoTrue](https://github.com/netlify/gotrue) 交互的客户端库
|
||||
<table style="table-layout:fixed; white-space: nowrap;">
|
||||
<tr>
|
||||
<th>语言</th>
|
||||
<th>客户端</th>
|
||||
<th colspan="4">模块-客户端(已集成在 Supabase 客户端中)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Supabase</th>
|
||||
<th><a href="https://github.com/postgrest/postgrest" target="_blank" rel="noopener noreferrer">PostgREST</a></th>
|
||||
<th><a href="https://github.com/supabase/gotrue" target="_blank" rel="noopener noreferrer">GoTrue</a></th>
|
||||
<th><a href="https://github.com/supabase/realtime" target="_blank" rel="noopener noreferrer">Realtime</a></th>
|
||||
<th><a href="https://github.com/supabase/storage-api" target="_blank" rel="noopener noreferrer">Storage</a></th>
|
||||
</tr>
|
||||
<!-- TEMPLATE FOR NEW ROW -->
|
||||
<!-- START ROW
|
||||
<tr>
|
||||
<td>lang</td>
|
||||
<td><a href="https://github.com/supabase-community/supabase-lang" target="_blank" rel="noopener noreferrer">supabase-lang</a></td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-lang" target="_blank" rel="noopener noreferrer">postgrest-lang</a></td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-lang" target="_blank" rel="noopener noreferrer">gotrue-lang</a></td>
|
||||
<td><a href="https://github.com/supabase-community/realtime-lang" target="_blank" rel="noopener noreferrer">realtime-lang</a></td>
|
||||
<td><a href="https://github.com/supabase-community/storage-lang" target="_blank" rel="noopener noreferrer">storage-lang</a></td>
|
||||
</tr>
|
||||
END ROW -->
|
||||
<th colspan="6">⚡️ 官方 ⚡️</th>
|
||||
<tr>
|
||||
<td>JavaScript (TypeScript)</td>
|
||||
<td><a href="https://github.com/supabase/supabase-js" target="_blank" rel="noopener noreferrer">supabase-js</a></td>
|
||||
<td><a href="https://github.com/supabase/postgrest-js" target="_blank" rel="noopener noreferrer">postgrest-js</a></td>
|
||||
<td><a href="https://github.com/supabase/gotrue-js" target="_blank" rel="noopener noreferrer">gotrue-js</a></td>
|
||||
<td><a href="https://github.com/supabase/realtime-js" target="_blank" rel="noopener noreferrer">realtime-js</a></td>
|
||||
<td><a href="https://github.com/supabase/storage-js" target="_blank" rel="noopener noreferrer">storage-js</a></td>
|
||||
</tr>
|
||||
<th colspan="6">💚 社区 💚</th>
|
||||
<tr>
|
||||
<td>C#</td>
|
||||
<td><a href="https://github.com/supabase-community/supabase-csharp" target="_blank" rel="noopener noreferrer">supabase-csharp</a></td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-csharp" target="_blank" rel="noopener noreferrer">postgrest-csharp</a></td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-csharp" target="_blank" rel="noopener noreferrer">gotrue-csharp</a></td>
|
||||
<td><a href="https://github.com/supabase-community/realtime-csharp" target="_blank" rel="noopener noreferrer">realtime-csharp</a></td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dart (Flutter)</td>
|
||||
<td><a href="https://github.com/supabase/supabase-dart" target="_blank" rel="noopener noreferrer">supabase-dart</a></td>
|
||||
<td><a href="https://github.com/supabase/postgrest-dart" target="_blank" rel="noopener noreferrer">postgrest-dart</a></td>
|
||||
<td><a href="https://github.com/supabase/gotrue-dart" target="_blank" rel="noopener noreferrer">gotrue-lang</a></td>
|
||||
<td><a href="https://github.com/supabase/realtime-dart" target="_blank" rel="noopener noreferrer">realtime-dart</a></td>
|
||||
<td><a href="https://github.com/supabase/storage-dart" target="_blank" rel="noopener noreferrer">storage-dart</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Go</td>
|
||||
<td>-</td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-go" target="_blank" rel="noopener noreferrer">postgrest-go</a></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Java</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-java" target="_blank" rel="noopener noreferrer">gotrue-java</a></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Kotlin</td>
|
||||
<td>-</td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-kt" target="_blank" rel="noopener noreferrer">postgrest-kt</a></td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-kt" target="_blank" rel="noopener noreferrer">gotrue-kt</a></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Python</td>
|
||||
<td><a href="https://github.com/supabase-community/supabase-py" target="_blank" rel="noopener noreferrer">supabase-py</a></td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-py" target="_blank" rel="noopener noreferrer">postgrest-py</a></td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-py" target="_blank" rel="noopener noreferrer">gotrue-py</a></td>
|
||||
<td><a href="https://github.com/supabase-community/realtime-py" target="_blank" rel="noopener noreferrer">realtime-py</a></td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><a href="https://github.com/supabase-community/supabase-rb" target="_blank" rel="noopener noreferrer">supabase-rb</a></td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-rb" target="_blank" rel="noopener noreferrer">postgrest-rb</a></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rust</td>
|
||||
<td>-</td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-rs" target="_blank" rel="noopener noreferrer">postgrest-rs</a></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Swift</td>
|
||||
<td><a href="https://github.com/supabase-community/supabase-swift" target="_blank" rel="noopener noreferrer">supabase-swift</a></td>
|
||||
<td><a href="https://github.com/supabase-community/postgrest-swift" target="_blank" rel="noopener noreferrer">postgrest-swift</a></td>
|
||||
<td><a href="https://github.com/supabase-community/gotrue-swift" target="_blank" rel="noopener noreferrer">gotrue-swift</a></td>
|
||||
<td><a href="https://github.com/supabase-community/realtime-swift" target="_blank" rel="noopener noreferrer">realtime-swift</a></td>
|
||||
<td><a href="https://github.com/supabase-community/storage-swift" target="_blank" rel="noopener noreferrer">storage-swift</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
| 代码存储库 | 官方 | 社区 |
|
||||
| --------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **`supabase-{lang}`** | [`JS`](https://github.com/supabase/supabase-js) | [`C#`](https://github.com/supabase/supabase-csharp) \| [`Dart`](https://github.com/supabase/supabase-dart) \| [`Python`](https://github.com/supabase/supabase-py) \| `Rust` \| [`Ruby`](https://github.com/supabase/supabase-rb) \| `Go` |
|
||||
| `postgrest-{lang}` | [`JS`](https://github.com/supabase/postgrest-js) | [`C#`](https://github.com/supabase/postgrest-csharp) \| [`Dart`](https://github.com/supabase/postgrest-dart) \| [`Python`](https://github.com/supabase/postgrest-py) \| [`Rust`](https://github.com/supabase/postgrest-rs) \| [`Ruby`](https://github.com/supabase/postgrest-rb) \| [`Go`](https://github.com/supabase/postgrest-go) |
|
||||
| `realtime-{lang}` | [`JS`](https://github.com/supabase/realtime-js) | [`C#`](https://github.com/supabase/realtime-csharp) \| [`Dart`](https://github.com/supabase/realtime-dart) \| [`Python`](https://github.com/supabase/realtime-py) \| `Rust` \| `Ruby` \| `Go` |
|
||||
| `gotrue-{lang}` | [`JS`](https://github.com/supabase/gotrue-js) | [`C#`](https://github.com/supabase/gotrue-csharp) \| [`Dart`](https://github.com/supabase/gotrue-dart) \| [`Python`](https://github.com/supabase/gotrue-py) \| `Rust` \| `Ruby` \| `Go` |
|
||||
|
||||
## 翻译
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ Project settings are managed outside of the Dashboard. If you use docker-compose
|
||||
|
||||
## Running within a self-hosted environment
|
||||
|
||||
Firstly, follow the guide [here](https://www.notion.so/supabase/'%3Chttps://supabase.com/docs/guides/hosting/docker%3E') to get started with self-hosted Supabase.
|
||||
Firstly, follow the guide [here](https://supabase.com/docs/guides/hosting/docker) to get started with self-hosted Supabase.
|
||||
|
||||
```
|
||||
cd ..
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
## Template for building pages
|
||||
|
||||
```ts
|
||||
```tsx
|
||||
import { NextPage } from 'next'
|
||||
import { observer } from 'mobx-react-lite'
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ In your Draftbit builder interface:
|
||||
|
||||
In this section, let's populate a Fetch component with all the data from a simple Supabase and then display the data fetched from the Supabase data table in a List component.
|
||||
|
||||
For a reference, here is a how the Components tree looks like for this screen:
|
||||
For reference, here is a how the Components tree looks like for this screen:
|
||||
|
||||

|
||||
|
||||
@@ -158,7 +158,7 @@ In Draftbit, using a Touchable or a Button component, you can trigger the action
|
||||
|
||||
Now, there is a working `POST` request in Draftbit. Map its response to the components on your screen in Draftbit.
|
||||
|
||||
First, for each input component, make sure you have set the Field Names (found in the Configs tab, second from the left) to unique values. For example, in the screen below, there is one TextInput field component with the the value of the `Field Name` prop of `textInputValue`.
|
||||
First, for each input component, make sure you have set the Field Names (found in the Configs tab, second from the left) to unique values. For example, in the screen below, there is one TextInput field component with the value of the `Field Name` prop of `textInputValue`.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ npx vercel login
|
||||
|
||||
This will ask if we are happy to install `vercel`. Type `y` and hit `Enter`.
|
||||
|
||||
We will the need to authenticate Vercel by selecting `Continue with GitHub`.
|
||||
We will then need to authenticate Vercel by selecting `Continue with GitHub`.
|
||||
|
||||
This will open a browser window where you need to authenticate with your GitHub account.
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ Supabase provides a CLI so that you can develop your application locally, rather
|
||||
## Prerequisites
|
||||
|
||||
You will need to have these in your environment:
|
||||
|
||||
- Git
|
||||
- Docker (make sure the daemon is up and running)
|
||||
- Supabase CLI (instructions [here](https://github.com/supabase/cli))
|
||||
@@ -44,7 +45,6 @@ service_role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb
|
||||
|
||||
#### Accessing Services Directly
|
||||
|
||||
|
||||
<Tabs
|
||||
defaultValue="Postgres"
|
||||
values={[
|
||||
@@ -58,7 +58,7 @@ values={[
|
||||
postgresql://postgres:postgres@localhost:5432/postgres
|
||||
```
|
||||
|
||||
The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html)
|
||||
The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html)
|
||||
or any other Postgres client, such as [pgadmin](https://www.pgadmin.org/).
|
||||
|
||||
For example:
|
||||
@@ -75,8 +75,8 @@ psql 'postgresql://postgres:postgres@localhost:5432/postgres'
|
||||
http://localhost:54321
|
||||
```
|
||||
|
||||
All of the services are accessible through the API Gateway [Kong](https://github.com/Kong/kong)).
|
||||
If you are accessing these services without the client libraries, you may need to pass the client keys as an `Authorization` header.
|
||||
All of the services are accessible through the API Gateway [Kong](https://github.com/Kong/kong)).
|
||||
If you are accessing these services without the client libraries, you may need to pass the client keys as an `Authorization` header.
|
||||
You can learn more about these JWT headers in our [Resources](/docs/learn/auth-deep-dive/auth-deep-dive-jwts).
|
||||
|
||||
```sh
|
||||
@@ -90,14 +90,12 @@ http://localhost:54321/v1/storage/v1/ # Storage
|
||||
http://localhost:54321/v1/auth/v1/ # Auth (GoTrue)
|
||||
```
|
||||
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
## Example application
|
||||
|
||||
Now that we've learned how to install and start Supabase locally, let's see how you can use it with a frontend application.
|
||||
Now that we've learned how to install and start Supabase locally, let's see how you can use it with a frontend application.
|
||||
This quick-start guide will show you, how you can configure a React app which uses the Supabase stack.
|
||||
|
||||
```bash
|
||||
@@ -107,8 +105,8 @@ npx create-react-app react-demo --use-npm
|
||||
# move into the new folder
|
||||
cd react-demo
|
||||
|
||||
# set up Supabase
|
||||
supabase init
|
||||
# set up Supabase
|
||||
supabase init
|
||||
|
||||
# Save the install supabase-js library
|
||||
npm install --save @supabase/supabase-js
|
||||
@@ -145,7 +143,7 @@ When you're finished with Supabase, send <kbd>Ctrl-C</kbd> to stop the Docker se
|
||||
|
||||
## Migrations
|
||||
|
||||
You can also use the CLI to manage your migrations. Follow the the tour [here](https://github.com/supabase/cli/tree/main/examples/tour) to get started.
|
||||
You can also use the CLI to manage your migrations. Follow the tour [here](https://github.com/supabase/cli/tree/main/examples/tour) to get started.
|
||||
|
||||
## Next steps
|
||||
|
||||
|
||||
@@ -91,9 +91,9 @@ Among many other awesome things, the SupaSquad has been absolutely on fire build
|
||||
|
||||
- New maintainers [`@Dreinon`](https://github.com/dreinon), [`@anand2312`](https://github.com/anand2312), and [`@leynier`](https://github.com/leynier). 💚
|
||||
- `gotrue-py` rewritten and now at feature parity with `gotrue-js`.
|
||||
- Postgrest-py now support synchronous operations as well instead of just synchronous operations in the past. Also at feature-parity with postgrest-js.
|
||||
- Supabase-py is now Supabase (e.g. you do `pip3 install supabase` instead of `pip3 install supabase-py`).
|
||||
- Storage is working for the py client library but it's yet to be extracted out as a standalone lib.
|
||||
- `postgrest-py` now support synchronous operations as well instead of just asynchronous operations in the past. Also at feature parity with `postgrest-js`.
|
||||
- `supabase-py` is now `supabase` (e.g. you do `pip3 install supabase` instead of `pip3 install supabase-py`).
|
||||
- Storage is working for the Python client library but it's yet to be extracted out as a standalone lib.
|
||||
|
||||
## New tutorials and integration guides
|
||||
|
||||
|
||||
@@ -24,9 +24,9 @@ and [Self-Hosting](https://supabase.com/docs/guides/hosting/overview).
|
||||
Let's get the obvious question out of the way - why wasn't it already open source?
|
||||
|
||||
When Ant and I started Supabase the codebase was one large monorepo which contained everything from the dashboard to cloud infrastructure code to experimental code.
|
||||
This is our our preferred development setup - we like to keep all code in one place so that we have a single source of truth and tightly coupled CI workflows.
|
||||
This is our preferred development setup - we like to keep all code in one place so that we have a single source of truth and tightly coupled CI workflows.
|
||||
|
||||
The original Dashboard really wasn't much except a couple of button which allowed our Alpha users to start and stop a Supabase project - back then only a PostgreSQL connection string.
|
||||
The original Dashboard really wasn't much except a couple of buttons which allowed our Alpha users to start and stop a Supabase project - back then only a PostgreSQL connection string.
|
||||
|
||||
Then time went on, and we started gaining traction - a lot faster than expected.
|
||||
The nice thing about building for developers is that they are very vocal about the features they want to see next.
|
||||
@@ -55,7 +55,7 @@ Eventually we decided to open source all the frontend code, a shared codebase fo
|
||||
<summary>
|
||||
<a>Special shout out</a>
|
||||
</summary>
|
||||
Sentry do a fantastic job of <a href="https://develop.sentry.dev/sentry-vs-getsentry/">documenting their strategy</a> for managing a shared codebase and served as a great model for Supabase.
|
||||
Sentry do a fantastic job of <a href="https://develop.sentry.dev/sentry-vs-getsentry/">documenting their strategy</a> for managing a shared codebase and served as a great model for Supabase.
|
||||
</details>
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ and have it shipped to both the Platform and Self-Hosted environments - all in a
|
||||
|
||||
## Technical details
|
||||
|
||||
Let's jump into some of the technical implemetation for Supabase Studio.
|
||||
Let's jump into some of the technical implementation for Supabase Studio.
|
||||
|
||||
### Tech stack
|
||||
|
||||
|
||||
+78
-13
@@ -101,8 +101,18 @@ function AuthPage() {
|
||||
<div className="mb-10 lg:mb-0 col-span-12 lg:col-span-3">
|
||||
<p className="mb-4">
|
||||
<div className="flex items-center flex-wrap xl:w-64">
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/google-icon.svg`} width={21} alt="google auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/facebook-icon.svg`} width={21} alt="facebook auth login icon"/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/google-icon.svg`}
|
||||
width={21}
|
||||
alt="google auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/facebook-icon.svg`}
|
||||
width={21}
|
||||
alt="facebook auth login icon"
|
||||
/>
|
||||
<div className="mb-2 mr-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -116,17 +126,72 @@ function AuthPage() {
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/gitlab-icon.svg`} width={21} alt="gitlab auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/bitbucket-icon.svg`} width={21} alt="bitbucket auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/twitter-icon.svg`} width={21} alt="twitter auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/apple-icon.svg`} width={21} alt="apple auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/discord-icon.svg`} width={21} alt="discord auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/microsoft-icon.svg`} width={21} alt="microsoft auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/messagebird-icon.svg`} width={21} alt="messagebird auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/twilio-icon.svg`} width={21} alt="twilio auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/twitch-icon.svg`} width={21} alt="twitch auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/spotify-icon.svg`} width={21} alt="spotify auth login icon"/>
|
||||
<img className="mb-2 mr-2" src={`${basePath}/images/product/auth/slack-icon.svg`} width={21} alt="slack auth login icon"/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/gitlab-icon.svg`}
|
||||
width={21}
|
||||
alt="gitlab auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/bitbucket-icon.svg`}
|
||||
width={21}
|
||||
alt="bitbucket auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/twitter-icon.svg`}
|
||||
width={21}
|
||||
alt="twitter auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/apple-icon.svg`}
|
||||
width={21}
|
||||
alt="apple auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/discord-icon.svg`}
|
||||
width={21}
|
||||
alt="discord auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/microsoft-icon.svg`}
|
||||
width={21}
|
||||
alt="microsoft auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/messagebird-icon.svg`}
|
||||
width={21}
|
||||
alt="messagebird auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/twilio-icon.svg`}
|
||||
width={21}
|
||||
alt="twilio auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/twitch-icon.svg`}
|
||||
width={21}
|
||||
alt="twitch auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/spotify-icon.svg`}
|
||||
width={21}
|
||||
alt="spotify auth login icon"
|
||||
/>
|
||||
<img
|
||||
className="mb-2 mr-2"
|
||||
src={`${basePath}/images/product/auth/slack-icon.svg`}
|
||||
width={21}
|
||||
alt="slack auth login icon"
|
||||
/>
|
||||
</div>
|
||||
</p>
|
||||
<Typography.Title level={4}>All the social providers</Typography.Title>
|
||||
|
||||
Reference in new issue
Block a user