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

AWS Amplify v6 Vue项目无法导入Auth对象及获取OAuth令牌问题

问题描述

我正在使用VueJS构建AWS Amplify应用,执行以下命令添加并部署认证模块:

amplify add auth
amplify push
amplify env pull dev

通过导入@aws-amplify/ui-vue中的<Authenticator>组件实现了认证功能,代码如下:

import { Authenticator } from "@aws-amplify/ui-vue";

<authenticator>
  <template v-slot="{ user, signOut }">
  ...

为调用其他服务需获取OAuth用户令牌,我记得曾有Auth对象可提供用户详情获取方法,但按指南导入时:

import { Auth } from 'aws-amplify';

应用无法正常显示,浏览器抛出异常:

App.vue:4 Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/aws-amplify.js?v=ec6e723f' does not provide an export named 'Auth' (at App.vue:4:10)

我的环境版本:amplify --version: 12.8.2,"aws-amplify": "^6.0.5"。我尝试用以下代码获取access_token,但不确定是否为最优方案:

import { fetchAuthSession } from 'aws-amplify/auth';

onMounted( async() => {
try {
  console.log("AUTH: "+ JSON.stringify(await fetchAuthSession() ));
} catch(err) {
    console.error(err);
}  })

请问如何正确获取Auth对象或OAuth令牌?

解决方案

1. 关于Auth导入失败的原因

AWS Amplify v6采用模块化导入设计,不再提供全局Auth对象,所有认证相关API需从aws-amplify/auth单独导入,这是v6的核心变更之一。

2. 正确获取OAuth令牌的方式

你使用的fetchAuthSession就是v6中获取认证会话(包含令牌)的标准最优方案,可直接从返回结果提取所需令牌:

import { fetchAuthSession } from 'aws-amplify/auth';

onMounted(async () => {
  try {
    const session = await fetchAuthSession();
    // 获取access token
    const accessToken = session.tokens?.accessToken?.toString();
    // 若需要id token可提取
    const idToken = session.tokens?.idToken?.toString();
    console.log('Access Token:', accessToken);
  } catch (err) {
    console.error('获取会话失败:', err);
  }
});

3. 原Auth对象常用功能的替代方案

如果需要v5中Auth对象的其他功能,可使用对应的模块化API:

  • 获取当前用户:import { getCurrentUser } from 'aws-amplify/auth';
  • 登出操作:import { signOut } from 'aws-amplify/auth';
  • 强制刷新会话:await fetchAuthSession({ forceRefresh: true });

4. 结合<Authenticator>组件使用

在组件插槽中可通过user对象获取基础用户信息,但令牌仍需调用fetchAuthSession获取:

<authenticator>
  <template v-slot="{ user, signOut }">
    <button @click="getToken">获取令牌</button>
  </template>
</authenticator>

<script setup>
import { Authenticator } from "@aws-amplify/ui-vue";
import { fetchAuthSession } from 'aws-amplify/auth';

const getToken = async () => {
  const session = await fetchAuthSession();
  console.log(session.tokens?.accessToken?.toString());
};
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:12:21