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

使用AWS Amplify API客户端实现GraphQL调用鉴权及无用户报错咨询

解决方案

该需求可以实现,你当前报错是因为没有手动指定authToken配置项,Amplify默认会从当前已登录的Cognito用户会话中提取鉴权token,无有效登录会话时就会抛出无可用用户的错误,对应你之前AWSAppSyncClient的配置逻辑,有两种适配方案:

方案1:手动传入JWT Token(适配你原有自定义token逻辑)

如果是服务端渲染场景、或者你自行维护用户token,不需要走Amplify默认的登录会话管理,直接在API.graphql的入参中新增authToken字段即可,和你之前配置的jwtToken逻辑完全等价,代码示例如下:

const { data, errors } = await API.graphql(
  {
    query: listPlayers,
    authMode: "AMAZON_COGNITO_USER_POOLS",
    // 直接传入你获取到的Authorization头部的JWT值
    authToken: req.headers.authorization
  }
);

方案2:走Amplify默认的Cognito会话管理

如果是前端场景,你希望用Amplify自带的用户登录能力自动管理token,需要先完成两个前置步骤:

  • 首先完成Amplify全局配置,关联你的Cognito用户池和AppSync服务:
import { Amplify } from 'aws-amplify';
// aws-exports为Amplify CLI自动生成的配置文件,也可以手动填入对应服务参数
import awsconfig from './aws-exports'; 

Amplify.configure(awsconfig);
  • 调用GraphQL接口前先完成用户登录,登录成功后Amplify会自动从会话中提取token,不需要手动传入authToken:
import { Auth } from 'aws-amplify';
// 先执行登录逻辑
await Auth.signIn(你的用户名, 你的密码);
// 登录成功后再调用接口
const { data, errors } = await API.graphql({
  query: listPlayers,
  authMode: "AMAZON_COGNITO_USER_POOLS"
});

补充说明:authToken参数的优先级高于Amplify自动获取的会话token,自定义token场景优先使用方案1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:02