【问题标题】:Amplify w/Cognito: How do I get the Current User's Email?Amplify w/Cognito:如何获取当前用户的电子邮件?
【发布时间】:2020-03-09 11:22:22
【问题描述】:

我正在使用 AWS Amplify,并使用 Cognito 进行用户身份验证。

用户进入用户池,只需使用电子邮件地址和密码进行注册和登录。

当通过 Cognito 登录的用户导航到某个页面时,我想检索他们的电子邮件地址。我该怎么做?

我可以使用此代码检索一些用户数据(我正在使用 javascript/Angular):

import Auth from '@aws-amplify/auth';
...

ngOnInit(){
  Auth.currentAuthenticatedUser().then((user)=>{
        console.log('user = ' + JSON.stringify(user.pool))      
 })
}

电子邮件确实出现在响应中,但我还无法将电子邮件与返回的 JSON 隔离开来。

我已经尝试过浏览文档,但我还没有找到关于可以添加到currentAuthenticatedUser() 的属性选项之类的信息,或者是否有另一种更清洁的方法(我假设有) .

编辑:它看起来像以下作品:

Auth.currentAuthenticatedUser().then((user) => {
  console.log('user email = ' + user.attributes.email);
});

但我仍然希望更好地理解文档。我在一个随机的 github 问题中找到了这个解决方案,而不是官方文档。我可以在 AWS Amplify / Cognito 文档中的何处找到此解决方案?

【问题讨论】:

  • 如果您发布 JSON 的结构并更改您不想显示给我们的任何数据,这将有所帮助。
  • 我实际上认为 currentAuthenticatedUser 不一定是正确的方法——我只是还没有找到替代方法。返回的 JSON 数据不是我所期望的任何正确方法的干净 JSON。我希望这是一个相当普遍的要求,并且有一种更简洁的方法来做到这一点。

标签: javascript amazon-cognito aws-amplify


【解决方案1】:

您可以从官方文档中查看this one

并启用读取权限 常规设置 -> 应用客户端 -> 显示详细信息 -> 设置属性读写权限链接

然后确保您正在获取更新的属性

Auth.currentAuthenticatedUser({ bypassCache: true })

【讨论】:

    【解决方案2】:
    Auth.currentSession()
        .then((data) => {
           // this data has user details in accessToken
        }).catch(err => console.log(err));
    

    【讨论】:

      【解决方案3】:
          import cognito from "../path/to/your/config/cognito.json";
          import Amplify, { Auth, Hub } from 'aws-amplify';
          ...
          ...
      
      
          useEffect(() => {
              Amplify.configure({ Auth: cognito });
              Hub.listen('auth', ({ payload: { event, data } }) => {
                  switch (event) {
                      case 'signIn':
                          console.log('Event name -> ', event, data)
                          // here is your name, email e.t.c.
                          console.log(data.signInUserSession.idToken.payload);
                          break
                      case 'signOut':
                          console.log('sign out')
                          // this.setState({ user: null })
                          break
                      default:
                          console.log('Unhandled use case - ' + event)
                  }
              })
          }, [])
      

      【讨论】:

        【解决方案4】:

        用户登录后,以下对我有用...

        import { Auth, Amplify } from 'aws-amplify'
        
        console.log(Auth.user.attributes.email)
        

        【讨论】:

        • 一般不建议。 Auth 类上的 user 属性被标记为私有变量,不能可靠地直接访问。
        猜你喜欢
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 2018-12-13
        • 2019-09-30
        • 2018-10-09
        • 1970-01-01
        相关资源
        最近更新 更多