使用认知功能放大:如何获取当前用户的电子邮件?

时间:2019-11-13 15:55:16

标签: javascript amazon-cognito aws-amplify

我正在使用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文档中在哪里可以找到该解决方案?

4 个答案:

答案 0 :(得分:0)

Auth.currentSession()
    .then((data) => {
       // this data has user details in accessToken
    }).catch(err => console.log(err));

答案 1 :(得分:0)

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

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

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

Auth.currentAuthenticatedUser({ bypassCache: true })

答案 2 :(得分:0)

    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)
            }
        })
    }, [])

答案 3 :(得分:-1)

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

import { Auth, Amplify } from 'aws-amplify'

console.log(Auth.user.attributes.email)