javascript - React.js 从 AWS 读取用户信息并设置变量状态

标签 javascript reactjs amazon-web-services amazon-cognito

如果它的自定义属性等于 1,我想读取用户信息并将“Admin”变量设置为 yes。 问题是,当我想读取用户属性时,程序因类型错误而崩溃:无法读取未定义的属性‘属性’”

这是我的代码:

import React, { useState, useEffect } from "react";
import './App.css';
import { Link, withRouter } from "react-router-dom";
import { Nav, Navbar, NavItem, Image } from "react-bootstrap";
import { LinkContainer } from "react-router-bootstrap";
import Routes from "./Routes";
import { Auth } from "aws-amplify";
import logo from './img/download.svg';


function App(props) {
    const [isAuthenticating, setIsAuthenticating] = useState(true);
    const [isAuthenticated, userHasAuthenticated] = useState(false);
    const [userData, setUserData] = useState([]);
    const [isAdmin, setIsAdmin] = useState(true);

    useEffect(() => {
      onLoad();
    }, [],);

    async function handleLogout() {
      await Auth.signOut();
      userHasAuthenticated(false);
      setIsAdmin(false);
      props.history.push("/login");
    }

    async function onLoad() {
      try {
        await Auth.currentSession();
        userHasAuthenticated(true);
        await Auth.currentUserInfo().then(user => setUserData(user));
        if (userData.attributes['custom:isAdmin'] === "1" ) {
          setIsAdmin(true)
        }
      }
      catch(e) {
        if (e !== 'No current user') {
        alert(e);
      }
    }

    setIsAuthenticating(false);
  }

return (...)

最佳答案

您好,在 await 函数中,您似乎在 then 中设置了 userData 的值,但在外部您正在访问 userData.attributes

所以也许当您检查 userData.attributes 时,userData 没有被填充,因为它是 asyncronous 而不是在 then 中设置它> 您可以使用 await 将响应分配为新变量,因此它只会在 async 代码执行后执行下一个代码。

const user = await Auth.currentUserInfo();

if(user.attributes['custom:isAdmin'] === "1" ) {
  setUserData(user);
  setIsAdmin(true);
}

关于javascript - React.js 从 AWS 读取用户信息并设置变量状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696175/

相关文章:

amazon-web-services - 从亚马逊下载数据集

javascript - 根据保存在 localStorage 中的数据设置 <div> 的位置

javascript - 如何在 Javascript 中创建动态变量?

javascript - 停止将 '' 编码为 Javascript 中的引号

reactjs - 检索参数并将参数设置为 useEffect Hook 中的获取请求中的参数

amazon-web-services - 给定 AWS 访问/ key 对,我如何检索其 IAM 权限?

amazon-web-services - 如何在 ansible 和已经存在的 ec2 中使用自动缩放

javascript - 2sxc - 将 @Content.field var 放入 javascript 文件中

javascript - 将值从 map 传递到状态

javascript - 将 React 的不可变助手与 Immutable.js 结合使用