首页
学习
活动
专区
圈层
工具
发布
39 篇文章
1
Docker 从Dockerfile 构建镜像 :build 命令的用法
2
[操作系统] 环境变量详解
3
【多厂商设备仿真】EVE-NG社区懒人版5.1+使用方法,如何导入、设备连线、关联CRT、抓包
4
EVE-NG社区懒人版发布——By EmulatedLab
5
一键开启AI编程新纪元:Windows版Trae初体验
6
PySide6 GUI 编程(14):QDial的使用
7
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
8
猫头虎分享:Python库 Twisted 的简介、安装、用法详解入门教程
9
在 Visual Studio Code 中添加自定义的代码片段
10
【Docker项目实战】使用Docker部署HomeBox家庭库存管理系统
11
Flet-基于Flutter的Python跨平台开发框架(组件学习)
12
Deno对Node最近支持TypeScript的回应
13
深入理解css中的link 和 @import
14
go语言安装及其环境配置
15
《深入浅出Dart》Dart的命令行和Web编程
16
FastAPI(42)- Static Files 静态资源
17
FastAPI 学习之路(三十八)Static Files
18
Python Playwright 入门指南
19
VueHooks Plus:Vue 3 Hooks 的全面解决方案
20
基于 Vue3、TypeScript、Vite2、Pinia 开源的后台管理框架
21
Vue2 + Element-Plus极客范儿后台管理框架,告别繁琐开发!
22
一文带你搞清楚USB、type-C、雷电三接口之间的区别与联系
23
使用tinc+quagga搭建个人SD-WAN网络
24
SSL VPN搭建与使用(OpenVpn)
25
利用Simple-RTMP-Server搭建RTMP和HLS直播服务(上)
26
飞牛 fnos 使用docker部署 Windows 系统:虚拟机的轻量级替代方案
27
iptable端口重定向 MASQUERADE[通俗易懂]
28
68.8K的 star的Supabase免费!2 分钟搞定用户认证功能
29
全新升级!Supabase 与 Next.js 14 的完美融合
30
Arista 收购软件定义网络先驱 Pluribus
31
你的第一个XDP BPF 程序
32
关于 COS 发布新域名 tencentcos.cn 的通知
33
腾讯云主机安装COSFS工具并使用COS对象存储
34
大白话讲清楚:什么是 Langchain 及其核心概念
35
当 Redis 原生支持 JSON,大厂程序员都说它像德芙一样丝滑
36
使用腾讯COS对象存储同步obsidian
37
【linux命令讲解大全】195.Bash 命令解析:declare 的用法和功能详解
38
统信 UOS 使用 Remmina 工具实现 RDP、SSH、SFTP 远程连接
39
终端下强大的资源管理器 -- Ranger 详解
清单首页2025文章详情

全新升级!Supabase 与 Next.js 14 的完美融合

Next.js 14:稳定性的重大升级

在 Next.js Conf 2023 上,Vercel 团队发布了 Next.js 14 版本。这个版本最大的亮点是不包含任何新功能。这种做法在技术界可能看起来不太常见,但这实际上是对 Next.js 稳定性和性能的一次重大提升。例如,Server Actions 特性现在被标记为稳定版本,这意味着开发者可以更简单、更安全地在服务器端进行用户认证。

Supabase 与 Next.js 14:完美兼容

Supabase 是一个开源的 Firebase 替代品,提供数据库、认证、实时订阅等功能。而现在,Supabase 宣布完全支持 Next.js 14。这对于使用 Supabase 和 Next.js 构建应用的开发者来说,是一个巨大的利好消息。

如何实现兼容?

  • 服务器端组件:在 Next.js 中使用 Server Components,使得从 Supabase 获取数据变得非常简单。这意味着开发者可以在服务器端直接操作数据库,无需担心前端和后端的分离。
  • 配置 Supabase 使用 Cookies:由于 Supabase 默认使用 localStorage 来存储用户会话信息,而在服务器端没有 localStorage 的概念,因此必须将 Supabase 配置为在服务器上使用 Cookies。这需要一些编码工作,但 Supabase 提供了一个名为 @supabase/ssr 的包,以简化这一流程。
  • 客户端和服务器端的无缝集成:通过适当配置,Supabase 可以在客户端和服务器端无缝工作,确保用户会话的安全和可靠。

代码示例:使用 Supabase 和 Next.js

1、Server Actions 的简化认证流程:

下面的代码示例演示了如何在 Next.js 中使用 Server Actions 进行用户认证。这个过程完全在服务器端完成。

代码语言:javascript
代码运行次数:0
复制
export default async function Page() {
  const signIn = async () => {
    'use server'
    supabase.auth.signInWithOAuth({...})
  }

  return (
    <form action={signIn}>
      <button>Sign in with GitHub</button>
    </form>
  )
}

在这个示例中,通过 signIn 函数实现用户的 OAuth 认证。

2、获取数据变得更简单: 使用 Server Components,从 Supabase 获取数据变得极为简单。以下是一个示例:

代码语言:javascript
代码运行次数:0
复制
export default async function Page() {
  const { data } = await supabase.from('...').select()
  return ...
}

在这里,通过一个异步函数直接从 Supabase 数据库中获取数据。

3、结合数据获取和变更逻辑:

Server Actions 允许你将数据变更逻辑放在负责获取数据和渲染页面的 Server Components 旁边:

代码语言:javascript
代码运行次数:0
复制
export default async function Page() {
  const { data } = await supabase.from('...').select()

  const createNote = async () => {
    'use server'
    await supabase.from('...').insert({...})
  }

  return ...
}

在这个例子中,除了获取数据,还展示了如何在同一个组件中添加数据。

如何配置 Supabase 以使用 Cookies

默认情况下, supabase-js 使用 localStorage 来存储用户的会话。这对于客户端应用程序很有效,但是当您尝试在服务器组件中使用 supabase-js 时,会失败,因为服务器上没有'localStorage'的概念。

为了做到这一点,我们需要配置 supabase-js 在服务器上运行时使用cookies而不是 localStorage 。但是这段代码有点冗长,要求人们在使用Supabase构建的每个应用程序中都进行复制。

代码语言:javascript
代码运行次数:0
复制
const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    flowType: 'pkce',
    autoRefreshToken: false,
    detectSessionInUrl: false,
    persistSession: true,
    storage: {
      getItem: async (key: string) => {
        cookieStore.get(key)
      },
      setItem: async (key: string, value: string) => {
        cookieStore.set(key, value)
      },
      removeItem: async (key: string) => {
        cookieStore.remove(key)
      },
    },
  },
})

这样就处理了Next.js的服务器端部分,但由于我们建议使用行级安全性(RLS)策略保护应用程序,您也可以在客户端安全地访问用户的会话。因此,我们需要告诉浏览器如何访问该cookie:

代码语言:javascript
代码运行次数:0
复制
const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    flowType: 'pkce',
    autoRefreshToken: true,
    detectSessionInUrl: true,
    persistSession: true,
    storage: {
      getItem: async (key: string) => {
        return parse(document.cookie[key])
      },
      setItem: async (key: string, value: string) => {
        document.cookie = serialize(key, value)
      },
    },
    removeItem: async (key: string) => {
      document.cookie = serialize(key, '', {
        maxAge: 0,
      })
    },
  },
})

这是一段非常混乱的代码!因此,我们决定创建一个名为 @supabase/ssr 的包,为您完成所有这些工作。然后,我们进一步创建了一个Next.js和Supabase的起始模板,这样您就可以专注于构建您的精彩应用!

https://supabase.com/docs/guides/getting-started/quickstarts/nextjs

开始使用

对于新手开发者来说,使用 Next.js 和 Supabase 的启动模板是一个简单的开始方式:

代码语言:javascript
代码运行次数:0
复制
npx create-next-app@latest -e with-supabase

这个命令会创建一个预配置的项目,使你能够快速开始构建应用。

结束

Next.js 14 和 Supabase 的结合为开发者提供了一个强大、灵活且稳定的平台,用于构建现代的网络应用。这对于想要在短时间内快速构建并扩展应用的开发者来说,是一个非常有吸引力的选择。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

更多内容,请查看文章来源: https://supabase.com/blog/supabase-is-now-compatible-with-nextjs-14?ref=dailydev

下一篇
举报
领券