You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js+Sanity中useState切换时环境变量不可访问的安全解决方案

解决方法

1. 转换环境变量为客户端可访问格式

Next.js 中仅前缀为 NEXT_PUBLIC_ 的环境变量会暴露给客户端组件。修改你的 .env 文件:

NEXT_PUBLIC_SANITY_PROJECT_ID=你的项目ID
NEXT_PUBLIC_SANITY_DATASET=你的数据集名称

2. 更新 Sanity 客户端配置

修改 sanity.js 文件,使用新的公开环境变量:

// sanity.js
import { createClient } from '@sanity/client'
import imageUrlBuilder from '@sanity/image-url';

const client = createClient({
  projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID, 
  dataset: process.env.NEXT_PUBLIC_SANITY_DATASET,
  useCdn: true, 
  apiVersion: '2024-09-20'
});

const builder = imageUrlBuilder(client);

export function urlFor(source) {
  return builder.image(source);
}

export default client;

3. 重启开发服务器

修改 .env 文件后必须重启 Next.js 开发服务器,确保新环境变量被正确加载。

安全性说明

Sanity 的项目 ID 和数据集名称本身属于公开信息——它们会直接出现在 CDN 图片的 URL 中(例如 https://cdn.sanity.io/images/{项目ID}/{数据集}/...),任何人通过浏览器开发者工具都能查看。因此将这些变量设为 NEXT_PUBLIC_ 不会带来额外安全风险,同时能保证客户端组件在状态更新后仍可正常访问配置。

内容的提问来源于stack exchange,提问作者Aro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:22:14