Nuxt3 实战 (七):配置 Supabase 数据库

简介: 这篇文章介绍了如何为Nuxt项目集成Supabase数据库。文章首先阐述了选择Supabase作为Nuxt项目的数据库的理由,包括其良好的网络评价、与Nuxt的良好集成以及对用户认证和身份鉴权的支持。接着,文章详细介绍了Supabase的特点,如使用PostgreSQL作为数据库、提供完整的认证系统、支持实时数据同步和提供对象存储服务等。然后,文章指导读者如何在Nuxt项目中安装和配置Supabase,包括设置重定向策略和获取数据库访问密钥。最后,文章强调了在开发环境和生产环境中使用不同密钥的重要性。

前言

这个章节我们要先把数据库的环境配置好,古人云:工欲善其事,必先利其器

这两天我一直在网上寻找最适合 Nuxt 的数据库,之前在做个人项目时经常用的是 MysqlMongoDB,也用过 ORM 框架比如:SequelizeTypeORM,本来计划使用 Prisma,后来认真看了 Nuxt 集成的数据库模块后,还是选择了 Supabase,在我看来主要原因有3点:

  1. Supabase 网上风评比较好,而且 Nuxt 集成了 Nuxt Supabase 模块
  2. 用户认证和身份鉴权开箱即用,提供了多种认证类型机制
  3. 我没用过,在开发上我喜欢用我没用过的技术或工具

话不多说,直接整活。

Supabase 介绍

Supabase 是一个开源的 Firebase 替代品,提供了一系列的后端功能,让你可以更快地构建产品。主要特点有:

  • 数据库:Supabase 使用 PostgreSQL 作为数据库,支持 SQL 和 RESTful API 访问
  • 认证:Supabase 提供了一个完整的认证系统,支持邮箱、手机号、第三方服务等多种登录方式
  • 实时订阅:Supabase 允许你通过 WebSocket 实现实时数据同步,无需编写额外的代码
  • 存储:Supabase 提供了一个对象存储服务,可以方便地上传、下载和管理文件
  • 边缘函数:Supabase 支持在边缘节点上运行 JavaScript 函数,可以用来处理请求或触发事件

Supabase 有一个免费套餐,可以让你创建最多三个项目,并享受一定的资源限额。如果你需要更多的项目或资源,你可以选择按需付费或者预付费的套餐。

创建 Supabase 数据库

  1. 打开 Supabase Dashboard,选择登录方式,这里我直接选择 Github 登录
    fhskdiqcvro1niqatwtnn8zudflosdtp.png

  2. 进入控制台,点击 New project 创建项目
    3ot25n0mrowstwa5syxbfyp52q9u5dv6.png

  3. 进入项目管理界面,点击左侧菜单的 Database,再点击右侧的 New table 创建一张表
    hbrxids6amecmkelxyjnd89s02rjqqhq.png
    roov67ea7ddwrtqphdvmudj0scog0e8k.png

  4. 点击右侧菜单的 Table Editor,打开新建的表,先插入两条测试数据
    tnq2fhltso2i50vl3ekwxt5t2799u1av.png

  5. 点击右侧菜单的 Project Settings - API,在右侧可以看到项目连接所需要的密钥
    dmrekfo2ahkghbz55xahn7i9jfc86sv9.png

    到这里,我们就创建好数据库了,接下来我们在 Nuxt 上测试一下是否能成功连接。

Nuxt 安装 Supabase

  1. 根目录下执行命令
    pnpm add @nuxtjs/supabase -D
    pnpm add @supabase/supabase-js
    
  2. .env 文件中添加 SUPABASE_URLSUPABASE_KEY
    SUPABASE_URL="https://example.supabase.co"
    SUPABASE_KEY="<your_key>"
    
  3. 打开 nuxt.config.ts 文件,添加配置:

    export default defineNuxtConfig({
         
    modules: ['@nuxtjs/supabase'],
    // 自定义配置
    supabase: {
         
    redirect: false // https://supabase.nuxtjs.org/get-started#redirect
    },
    })
    

    这里我们先将配置 redirect 设置为 false,因为 Supabase 默认如果未经身份验证的用户试图访问受保护的登录页面,则自动重定向到配置的登录页面。

  4. 打开 pages/index.vue 文件,尝试访问数据库

    <template>
    <div
      class="flex justify-center items-center font-black text-5xl flex-col"
      style="height: calc(100vh - 8rem)"
    >
      Hello World!
      <div class="flex gap-4 mt-4">
        <UButton
          v-for="item in data"
          :key="item.id"
          :label="item.name"
        />
      </div>
    </div>
    </template>
    
    <script setup lang="ts">
    import type {
           CategoryList } from '~/types'
    const supabase = useSupabaseClient<CategoryList>()
    
    const {
           data, error } = await supabase.from('site_category').select()
    
    console.log('data',data)
    console.log('error',error)
    </script>
    

    在浏览器打开,如果不出意外的话,你能连接到数据库,但是你会得到一个空数组。重点来了,这是为什么呢?
    a777il7di2htlhvet8cm5d8qx3meunq7.png

配置 RLS 安全策略

之所以会得到空数组,是因为 Supabase 为每张表启动 Row Level Security 策略,我们回到 Supabase Dashboard,打开右侧菜单 Authentication - Policies,可以看到在表的安全策略中有个提示:
ihlc7hcawfui5b8gqzie8y9bsmf9zpqm.png

翻译就是:已为此表启用行级别安全性,但未设置任何策略,选择查询将返回一个空的结果数组。

知道原因后,我们需要配置一个安全策略,点击右侧的 Create policy,这里我们只需要放开 Select 查询的权限就行,它会绕过 Row Level Security 策略:
eicd2jipg630o0z8ssyuk6slbjxz6h6z.png

刷新浏览器,我们就能看到数据正常访问了:
ye77q8bor7oln473ncav48693in6vd0c.png

这里我们只是放开了 Select 查询的权限,后续的 INSERTUPDATE 等操作权限会在身份认证后才可以执行。

总结

通过本文,你可以成功使用 Nuxt 连接 Supabase 数据库,但其中也有几个点需要注意:

  1. Supabase 为每张表启动 Row Level Security 策略,如果你想在不经过身份认证的情况下执行数据库操作,需要配置 Policies 策略
  2. Project Settings - API 有两个 Project API keys
    • anon key:如果为表和已配置的策略启用了行级安全性,则可以在浏览器中安全使用此键
    • service_role:此密钥具有绕过行级安全性的能力,永远不要公开分享
  3. 在开发环境中,我们往往需要不用完成身份认证就能执行数据库操作,这时候你就可以把 SUPABASE_KEY 设置成 service_role

但是生产环境中一定要切换成 anon key,因为 SUPABASE_KEY 会暴露在浏览器的请求头中

Github 仓库dream-site

线上预览dream-site.cn

相关文章
|
7月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
646 93
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
809 7
|
人工智能 关系型数据库 OLAP
聚光灯已就位!阿里云瑶池数据库邀你征战Cursor首届实战征文大赛
阿里云AnalyticDB携手Cursor中文社区,正式发起首届实战征文大赛!我们诚邀开发者融合Cursor的智能编程能力与AnalyticDB PostgreSQL提供的Supabase服务进行项目开发,让优秀项目被专家看见、被机遇拥抱!
|
10月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
488 1
|
10月前
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
2479 4
|
7月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
856 7
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1352 5
|
7月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
656 0
|
9月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
707 0
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
505 158