玩转 Sanity Token 认证,保护你的数据安全

玩转 Sanity Token 认证,保护你的数据安全

默认情况下 Sanity 数据集(dateset)是公开访问的,也就说如果别人知道你的 projectId 和 dataset 名称就可以请求你所有的数据,非常不安全。

我们只希望只有我们自己的客户端可以请求数据,禁止其他人访问。接下来为大家介绍如果为将数据请求加上 Token 认证,保护数据安全。

🔑生成 Token

首先,我们需要在 Sanity Manage 的 API 面板中点击 "Add API token",输入 Name,选择 "Viewer" 角色(只能读取数据),然后点击 "Save"。

别忘了保管好你的 Token,因为它只会显示一次,如果丢失了只能重新生成。

⚙️ 配置客户端

接下来,将生成的 Token 添加到你的 Sanity 客户端配置中,让你的请求携带 Token 身份。

// sanity-config.js
import { createClient } from 'next-sanity'

export const client = createClient({
  useCdn: process.env.NODE_ENV === 'production', 
  // useCdn 为 false 才能使用 previewDrafts
  perspective: process.env.NODE_ENV === 'production' ? 'published' : 'previewDrafts', 
  // 生产环境只显示已发布的文档,开发环境显示所有文档(草稿+已发布文档)
  token: '放置你的 Token',
  // ...
})

同时,也要设置好 perspective ,这样在生产环境下只会返回已发布的文档。因为添加 Token 认证后默认情况下数据请求会返回所有文档。但是,通常在生产环境我们只需要显示已经发布的文档,详情查看官方关于 perspective 的说明

当然,以上介绍的配置方法只对服务端请求 Sanity 适用,如果你是在浏览器进行请求,Token 很容易暴露,就不适用于这样配置了,可以查看官方更多的安全方案

🙈修改数据集可见性

最后一步,进入 Sanity Manage 的 Dataset 面板,将数据集修改为私有。这样一来,只有携带 Token 的请求才能访问你的数据。

需要注意,如果你的项目已经在生产环境运行,那么在添加 Token 后必须重新部署项目,然后再将数据集设置为私有。否则,生产环境的数据请求将会因为没有携带 Token 而失败😱。

🪤踩坑经验

在本地调试时,你可能会遇到这种情况:即使数据集已经设置为私有,但是客户端没有配置 Token 还是可以请求数据。别惊慌,这是因为本地缓存的 Cookie 导致的。清除一下缓存,或者换个浏览器打开,没有配置 Token 的情况下就无法请求数据了。

总之,通过 Token 认证,我们可以确保数据的安全性,为我们的应用增添一层坚实的防护💪。

📚相关资源

喜欢站长
评论