Supabase 是一个 Firebase 的开源替代品。它提供了 Postgres 数据库、身份验证、边缘函数、实时订阅和存储。
- 一个 Supabase 项目。如果你没有,你可以免费注册 supabase.com 并创建一个新的项目。
- 一个开启了 服务端渲染模式 (SSR) 的 Astro 项目。
- 为你的项目添加 Supabase 凭据。你可以在你的 Supabase 项目中的 Settings > API 页签中找到这些内容。
SUPABASE_URL
: 你的 Supabase 项目的URL。
SUPABASE_ANON_KEY
: 你的 Supabase 项目的密钥。
要将 Supabase 凭据添加到 Astro,需要项目的根目录下创建一个名为 .env
的文件,并添加以下变量:
现在你已经可以在项目中使用这些变量。
如果你希望为 Supabase 环境变量启用 IntelliSense 功能,那么可以在 src/
目录中编辑或创建 env.d.ts
文件,并配置你的自定义类型:
现在你的项目应该包括以下几个新文件:
文件夹src/
- .env
- astro.config.mjs
- package.json
要将 Astro 连接到 Supabase 需要在你的项目中安装 @supabase/supabase-js
:
接下来,在 src/
目录下创建一个名为 lib
的文件夹。 这将是你添加 Supabase 客户端代码的地方。
在 supabase.ts
文件中,请添加以下代码来初始化客户端中的 Supabase:
现在,你的项目应该包含了以下这些新文件:
文件夹src/
- .env
- astro.config.mjs
- package.json
Supabase 提供了开箱即用的身份验证功能。它支持电子邮件(或密码身份)验证以及如GitHub, Google等多个提供商的 OAuth 身份验证。
为了在你的项目中添加身份验证功能,你需要创建一些服务器端点。这些端点将被用作注册、登录、退出登录用户:
POST /api/auth/register
: 创建一个新用户。
POST /api/auth/signin
: 用户登录。
GET /api/auth/signout
: 用户退出登录。
在项目的 src/pages/api/auth/
目录下,创建这些端点。如果你正在使用 hybrid
渲染模式,则必须在每个文件的顶部指定 export const prerender = false
以按需渲染这些端点。你的项目现在应该包含这些新文件:
文件夹src/
文件夹lib/
文件夹pages/
文件夹api/
文件夹auth/
- signin.ts
- signout.ts
- register.ts
- env.d.ts
- .env
- astro.config.mjs
- package.json
register.ts
文件包含使用 Supabase 注册用户的代码逻辑。它接受带有一个电子邮箱和密码信息的 POST
请求。然后它将使用 Supabase SDK 创建一个新用户。
signin.ts
文件包含使用 Supabase 执行用户登录的代码逻辑。它接受一个带有电子邮箱和密码信息的 POST
请求。然后它将使用 Supabase SDK 登录用户。
signout.ts
文件包含使用 Supabase 执行用户退出登录的代码逻辑。它接受一个 GET
请求并且删除用户的访问信息和刷新令牌。
现在你已经创建了服务器端点,接下来创建使用它们的页面:
src/pages/register
: 包含一个创建新用户的表单。
src/pages/signin
: 包含一个用户登录的表单。
src/pages/dashboard
: 包含一个仅登录用户能访问的页面。
在 src/pages
目录中创建这些页面。你的项目将会包含以下这些新文件:
文件夹src/
文件夹lib/
文件夹pages/
文件夹api/
文件夹auth/
- signin.ts
- signout.ts
- register.ts
- register.astro
- signin.astro
- dashboard.astro
- env.d.ts
- .env
- astro.config.mjs
- package.json
register.astro
包含一个用于创建新用户的表单,该表单接受电子邮箱和密码信息并将向 /api/auth/register
端点发送 POST
请求。
signin.astro
包含一个用于用户登录的表单。该表单接受电子邮箱和密码信息并将向 /api/auth/signin
端点发送 POST
请求。它还检查是否存在访问和刷新令牌。如果它们存在,它将重定向到 /dashboard
页面。
dashboard.astro
包含一个只有经过身份验证的用户才能访问的页面。它检查是否存在访问信息和刷新令牌。如果它们不存在或者无效,它将重定向到登录页面。
要想为你的应用程序添加 OAuth 提供商,你需要编辑 Supabase 客户端,以使用 "pkce"
启用身份验证流。你可以在 Supabase 文档 中阅读更多关于身份验证流的信息
接下来,你可以在 Supabase 控制台中,启用你想要使用的 OAuth 提供商。你可以在Supabase项目的「身份验证(Authentication) > 提供商(Providers)」选项卡中找到受支持的提供商列表。
下面的示例使用 GitHub 作为 OAuth 提供商。要将项目连接到 GitHub,请按照 Supabase 文档 中的步骤操作。
然后,在 src/pages/api/auth/callback.ts
处创建一个新的服务器端点来处理 OAuth 回调。该端点将用于交换 OAuth 代码以获得访问信息和刷新令牌。
接下来,编辑登录页面,使其包含一个用于使用 OAuth 提供商进行登录的新按钮。这个按钮应该发送一个 POST
请求到 provider
设置为 OAuth 提供商的名称的 /api/auth/signin
端点:
最后,编辑登录服务器端点以处理 OAuth 提供商。如果 provider
存在,它将重定向到 OAuth 提供商。否则,它将使用电子邮件和密码登录用户:
在创建 OAuth 回调端点并编辑登录页面和服务器端点之后,你的项目应该具有以下文件结构:
文件夹src/
文件夹lib/
文件夹pages/
文件夹api/
文件夹auth/
- signin.ts
- signout.ts
- register.ts
- callback.ts
- register.astro
- signin.astro
- dashboard.astro
- env.d.ts
- .env
- astro.config.mjs
- package.json
更多后端服务指南
Recipes