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

无法从AWS Cognito获取用户邮箱,无法导入Auth模块求替代方案

解决方案:AWS Cognito获取用户邮箱/手机号 + Auth模块导入问题

一、解决无法导入Auth模块的问题

Amplify v6版本重构了模块结构,Auth模块不再从aws-amplify根包导入,需要单独从子路径引入:

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

二、获取用户邮箱、手机号的方案

方案1:基于Amplify Auth模块获取完整属性

当前代码中Authenticator提供的user对象可能仅包含基础信息,手动调用Auth接口可获取完整用户属性,修改代码如下:

import React, { useEffect, useState } from 'react';
import { Amplify } from 'aws-amplify';
import { Auth } from 'aws-amplify/auth'; // 正确导入Auth
import awsmobile from './aws-exports';
import { withAuthenticator, Authenticator } from '@aws-amplify/ui-react';
import '@aws-amplify/ui-react/styles.css';

Amplify.configure(awsmobile);

function App() {
  const [userAttrs, setUserAttrs] = useState(null);

  useEffect(() => {
    const getFullUserAttrs = async () => {
      try {
        const currentUser = await Auth.currentAuthenticatedUser();
        const attrs = await Auth.userAttributes(currentUser);
        setUserAttrs(attrs);
      } catch (err) {
        console.error('获取用户属性失败:', err);
      }
    };
    getFullUserAttrs();
  }, []);

  return (
    <Authenticator>
      {({ signOut, user }) => (
        <div className="App">
          <p>Hey {user.username}, welcome to my channel, with auth!</p>
          {userAttrs ? (
            <>
              <h2>邮箱:{userAttrs.email || '未设置'}</h2>
              <h2>手机号:{userAttrs.phone_number || '未设置'}</h2>
            </>
          ) : (
            <h2>加载用户属性中...</h2>
          )}
          <button onClick={signOut}>Sign Out</button>
        </div>
      )}
    </Authenticator>
  );
}

export default withAuthenticator(App);

方案2:检查Cognito用户池配置(必做)

确保用户池配置满足以下条件,否则即使代码正确也无法获取属性:

  • 在用户池属性中,启用邮箱、手机号作为可选/必填属性
  • 在应用客户端设置的OAuth范围中,勾选email、phone_number
  • 用户注册时已填写并验证邮箱/手机号(若开启验证要求)

三、替代模块/库

如果不想依赖Amplify Auth,可直接用AWS SDK v3调用Cognito原生API:

  1. 安装依赖:
npm install @aws-sdk/client-cognito-identity-provider
  1. 调用示例:
import { CognitoIdentityProviderClient, GetUserCommand } from '@aws-sdk/client-cognito-identity-provider';
import { Auth } from 'aws-amplify/auth';

const fetchUserAttrsWithSDK = async () => {
  try {
    const currentUser = await Auth.currentAuthenticatedUser();
    const client = new CognitoIdentityProviderClient({ region: awsmobile.aws_cognito_region });
    const command = new GetUserCommand({
      AccessToken: currentUser.signInUserSession.accessToken.jwtToken
    });
    const res = await client.send(command);
    // 格式化属性为键值对
    const attrs = res.UserAttributes.reduce((acc, item) => {
      acc[item.Name] = item.Value;
      return acc;
    }, {});
    return attrs;
  } catch (err) {
    console.error('获取属性失败:', err);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:52:06