【问题标题】:Display cognito username as text将认知用户名显示为文本
【发布时间】:2021-10-19 10:51:05
【问题描述】:

我觉得这应该是一项非常容易的任务,但我找不到任何这样的例子,并且我自己尝试了很多方法来做到这一点。我试图简单地调用Auth.currentSession() 来检索我的 React Native 应用程序中的认知用户的用户名。到目前为止,此代码不允许加载应用程序,我只是得到一个空白屏幕。我尝试过的大多数解决方案要么导致空白屏幕,要么根本不显示任何内容。

import React from 'react';
import { Auth } from 'aws-amplify';
import { View, Text } from 'react-native';

class HomeScreen extends React.Component {
  getUsername = async () => {
    try {
      let info = await Auth.currentSession()
      let userName = info.idToken.payload['cognito:username']
      return userName
    } catch(err) {
      console.log(err)
    }
  }
  
  render() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Text>{this.getUsername()}</Text>
    </View>
  );
}}

export default HomeScreen;

以下代码不显示任何内容:

  render() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Text>{this.getUsername}</Text> // or {getUsername} or {getUsername()}
    </View>
  );
}}

我也试过这个:

function Homescreen() {

   async function getUsername() {
    try {
      let info = await Auth.currentSession()
      let userName = info.idToken.payload['cognito:username']
      return userName
    } catch(err) {
      console.log(err)
    }
  }
  
  render() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Text>{this.getUsername()}</Text>
    </View>
  );
}}

我应该警告这是我第一次编写 JS,所以我可能会遗漏一些非常明显的东西,并为此提前道歉。请帮忙,谢谢!

更新

class HomeScreen extends React.Component {
  constructor() {
    this.state = {name:''}
  }
  
  componentDidMount(){
    getUsername()
  }
  
  getUsername = async () => {
    try {
      let info = await Auth.currentSession()
      let userName = info.idToken.payload['cognito:username']
      this.setState({name: userName})
    } catch(err) {
      console.log(err)
    }
  };

  render() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Text>{this.state.name}</Text>
    </View>
  );
}}

产量:

【问题讨论】:

  • 您是如何登录的?您是否在 aws cognito“用户和组”选项卡中看到用户。
  • 我使用 withAuthenticator HOC 登录,然后我尝试创建异步函数来获取用户名,但它什么也没获取。我检查了 JWT,实际上存在一个字符串,但无法显示:)

标签: reactjs react-native authentication amazon-cognito aws-amplify


【解决方案1】:

需要在render方法中添加状态更新显示

constructor(){
  this.state = {name: ""}
}

componentDidMount(){
  getUsername()
}

getUsername = async () => {
  try {
    let info = await Auth.currentSession()
    let userName = info.idToken.payload['cognito:username']
    this.setState({name: userName })
  } catch(err) {
    console.log(err)
  }
}

并更新回报

<Text>{this.state.name}</Text>

【讨论】:

  • 感谢您的回答,我在运行此代码时收到了TypeError: Cannot set property 'state' of undefined
  • 刚刚更新了问题,反映了您的代码以及随之而来的错误,非常感谢您的帮助!
  • 在您的构造函数中,您需要传入“props”作为参数,然后调用“super(props)”
  • 它使用super(props) 编译,但仍然没有在&lt;Text&gt;{this.state.name}&lt;/Text&gt; 字段中显示任何用户名
猜你喜欢
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多