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

如何在Hasura中利用Action获取Token后发起带Token的Get请求且不存储Token?

实现步骤

1. 定义Hasura业务查询Action

在Hasura控制台创建一个Query类型的Action,命名为fetchProtectedData,用于触发完整的请求流程。定义对应的GraphQL Schema:

type Query {
  fetchProtectedData: ProtectedDataResponse
}

# 根据目标Get API的返回结构自定义响应字段
type ProtectedDataResponse {
  id: Int!
  name: String!
  description: String
}

2. 编写Action处理函数

在处理函数中完成两步操作:先调用外部API获取access token,再用该token发起目标Get请求。全程token仅在内存中流转,不会持久化存储。

以Node.js为例,处理函数示例(依赖axios):

const axios = require('axios');

module.exports = async (req) => {
  try {
    // 第一步:请求外部API获取access token
    const tokenRes = await axios.post('https://external-auth-api.com/token', {
      client_id: '你的客户端ID',
      client_secret: '你的客户端密钥',
      grant_type: 'client_credentials' // 按外部API授权类型调整
    });
    const accessToken = tokenRes.data.access_token;

    // 第二步:用token发起目标Get请求
    const dataRes = await axios.get('https://protected-api.com/target-data', {
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    });

    // 映射并返回结果给Hasura
    return {
      id: dataRes.data.id,
      name: dataRes.data.name,
      description: dataRes.data.desc
    };
  } catch (err) {
    // 捕获并返回错误信息
    return {
      __typename: 'ActionError',
      message: err.response?.data?.message || '请求失败'
    };
  }
};

3. 配置Action Webhook

将处理函数部署为Web服务(比如Vercel、Heroku或自建服务器),然后在Hasura控制台的Action配置中,填写Webhook地址,请求方法设为POST。

4. 测试调用

在Hasura GraphQL控制台执行以下查询,即可触发完整流程:

query {
  fetchProtectedData {
    id
    name
    description
  }
}

关键注意点

  • 处理函数需添加异常捕获,避免单个请求失败导致整个流程中断。
  • 外部Token API的认证参数(如client_id、用户名密码)需根据实际接口要求调整。
  • token仅在当前请求的内存生命周期中存在,请求结束后自动销毁,无存储风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:37