Docs
搜索⌘ K
  • 主页
  • 关于 The Graph
  • 支持的网络
  • 协议合约
  • 子图
    • 子流
      • 代币 API
        • AI Suite
          • 索引
            • 资源
              子图 > 操作指南

              4 分钟

              How to Secure API Keys Using Next.js Server Components

              概述

              我们可以使用Next.js服务器组件⁠ 来正确地保护API密钥,使其免于暴露在我们的dapp前端。为了进一步提高我们的API密钥安全性,我们还可以将我们的API密钥限制在Subgraph Studio中的某些子图或域。

              在这本指南中,我们将介绍如何创建一个Next.js服务器组件,该组件可以查询子图,同时还可以从前端隐藏API键。

              警告

              • Next.js服务器组件不能保护API密钥免于被拒绝服务攻击耗尽。
              • The Graph网络的网关具有拒绝服务检测和适当缓解策略,但使用服务器组件可能会削弱这些保护。
              • Next.js服务器组件引入了中心化风险,因为服务器可能会宕机。

              为什么需要它

              在标准React应用程序中,前端代码中包含的API密钥可能会暴露给客户端,从而带来安全风险。虽然通常使用.env文件,但它们并不能完全保护密钥,因为React的代码是在客户端执行的,在头中暴露了API密钥。Next.js服务器组件通过在服务器端处理敏感操作来解决这个问题。

              使用客户端导入查询子图

              Client-side rendering

              先决条件

              • 来自Subgraph Studio的API密钥。
              • Next.js和React的基本知识。
              • 一个使用App Router⁠的现有Next.js项目。

              循序渐进的指南

              步骤1:设置环境变量

              1. 在Next.js项目根目录中,创建一个.env.local文件。
              2. 添加API密钥:API_key=<api_key_here>。

              步骤2:创建服务器组件

              1. 在components目录中,创建一个ServerComponent.js 新文件。
              2. 使用提供的示例代码设置服务器组件。

              步骤3:实现服务器端API请求

              在ServerComponent.js 中,添加以下代码:

              1const API_KEY = process.env.API_KEY23export default async function ServerComponent() {4  const response = await fetch(5    `https://gateway-arbitrum.network.thegraph.com/api/${API_KEY}/subgraphs/id/HUZDsRpEVP2AvzDCyzDHtdc64dyDxx8FQjzsmqSg4H3B`,6    {7      method: 'POST',8      headers: {9        'Content-Type': 'application/json',10      },11      body: JSON.stringify({12        query: /* GraphQL */ `13          {14            factories(first: 5) {15              id16              poolCount17              txCount18              totalVolumeUSD19            }20          }21        `,22      }),23    },24  )2526  const responseData = await response.json()27  const data = responseData.data2829  return (30    <div>31      <h1>Server Component</h1>32      {data ? (33        <ul>34          {data.factories.map((factory) => (35            <li key={factory.id}>36              <p>ID: {factory.id}</p>37              <p>Pool Count: {factory.poolCount}</p>38              <p>Transaction Count: {factory.txCount}</p>39              <p>Total Volume USD: {factory.totalVolumeUSD}</p>40            </li>41          ))}42        </ul>43      ) : (44        <p>Loading data...</p>45      )}46    </div>47  )48}

              步骤4:使用服务器组件

              1. 在我们的页面文件(例如pages/index.js)中,导入ServerComponent。
              2. 导入组件:
              1import ServerComponent from './components/ServerComponent'23export default function Home() {4  return (5    <main>6      <ServerComponent />7    </main>8  )9}

              步骤5:运行并测试我们的Dapp

              使用npm run-dev启动我们的Next.js应用程序。验证服务器组件是否在不公开API密钥的情况下获取数据。

              Server-side rendering

              结论

              By utilizing Next.js Server Components, we’ve effectively hidden the API key from the client-side, enhancing the security of our application. This method ensures that sensitive operations are handled server-side, away from potential client-side vulnerabilities. Finally, be sure to explore other API key security measures to increase your API key security even further.

              ⁠在GitHub上编辑⁠

              使用枚举对NFT市场进行分类查询Polymarket数据
              在此页面上
              • 概述
              • 警告
              • 为什么需要它
              • 使用客户端导入查询子图
              • 先决条件
              • 循序渐进的指南
              • 步骤1:设置环境变量
              • 步骤2:创建服务器组件
              • 步骤3:实现服务器端API请求
              • 步骤4:使用服务器组件
              • 步骤5:运行并测试我们的Dapp
              • 结论
              The GraphStatusTestnetBrand AssetsForum安全Privacy PolicyTerms of Service