在Angular 2中实现AWS-Cognito

oka*_*son 4 amazon-cognito aws-cognito angular

我目前正在尝试使用Angular和AWS构建Web应用程序.我的第一步是使用AWS-Cognito进行工作身份验证.但是我在使用AWS-Cognito SDK时遇到了一些问题.

我采取了以下步骤:

我开始使用这个Angular 2快速入门来设置我的应用程序:https://github.com/angular/quickstart然后运行npm install

我的下一步是安装角度CLI npm install -g @angular/cli

接下来我运行了angular-cognito-identity-sdk: npm install --save amazon-cognito-identity-js

安装SDK后,我需要将sdk放入我的组件中:

 console.log(AmazonCognitoIdentity);

         var authenticationData = {
            Username : 'username',
            Password : 'password',
        };
        var authenticationDetails = new AmazonCognitoIdentity.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
        var poolData = {
            UserPoolId : 'pool_id', // Your user pool id here
            ClientId : 'client_id' // Your client id here
        };
        var userPool = new AmazonCognitoIdentity.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
        var userData = {
            Username : 'username',
            Pool : userPool
        };
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,Iäm给出了以下错误:

TypeError:无法读取未定义的属性"AuthenticationDetails"

我在这里错过了一步吗?在我的Angular应用程序中实现Cognito SDK的最佳方法是什么?

谢谢!

And*_*ndy 11

您不应该将整个包导入为

import * as AWSCognito from 'amazon-cognito-identity-js';
Run Code Online (Sandbox Code Playgroud)

这是个坏主意,因为你不需要一堆膨胀.

而只是导入你需要的东西.请参阅下面的示例.

import {AuthenticationDetails, CognitoUser, CognitoUserAttribute, CognitoUserPool} from 'amazon-cognito-identity-js';

const PoolData = {
  UserPoolId: 'us-east-1-xxxxx',
  ClientId: 'xxxxxxxxxxx'
};

const userPool = new CognitoUserPool(PoolData);

/////in export class....

/// Sign Up User
  signupUser(user: string, password: string, email: string) {
    const dataEmail = {
      Name: 'email',
      Value: email
    };
    const  emailAtt = [new CognitoUserAttribute(dataEmail)];

    userPool.signUp(user,  password, emailAtt, null, ((err, result) => {
      if (err) {
        console.log('There was an error ', err);
      } else {
        console.log('You have successfully signed up, please confirm your email ')
      }
    }))
  }

  /// Confirm User

    confirmUser(username: string, code: string) {
      const userData = {
        Username: username,
        Pool: userPool
      };

      const cognitoUser = new CognitoUser(userData);

      cognitoUser.confirmRegistration(code, true, (err, result) => {
        if (err) {
          console.log('There was an error -> ', err)
        } else {
          console.log('You have been confirmed ')
        }
      })
  }

  //// Sign in User

    signinUser(username: string, password: string) {
    const authData = {
      Username: username,
      Password: password
    };
    const authDetails = new AuthenticationDetails(authData);
    const userData = {
      Username: username,
      Pool: userPool
    };
    const cognitoUser = new CognitoUser(userData);

    cognitoUser.authenticateUser(authDetails, {
      onSuccess: (result) => {
        // console.log('You are now Logged in');
        this.isUser.next(true);
        this.router.navigate(['/'])
      },
      onFailure: (err) => {
        console.log('There was an error during login, please try again -> ', err)
      }
    })
  }

  /// Log User Out
    logoutUser() {
      userPool.getCurrentUser().signOut();
      this.router.navigate(['home'])
  }
Run Code Online (Sandbox Code Playgroud)


Adr*_*all 1

去除CognitoIdentityServiceProvider。例如:

import * as AWSCognito from 'amazon-cognito-identity-js';

// Later on
const userPool = new AWSCognito.CognitoUserPool(awsCognitoSettings);
const authDetails = new AWSCognito.AuthenticationDetails({
  Username: this.state.username,
  Password: this.state.password
});
const cognitoUser = new AWSCognito.CognitoUser({
  Username: this.state.username,
  Pool: userPool
});
cognitoUser.authenticateUser(authDetails, {
  onSuccess: (result) => {
    console.log(`access token = ${result.getAccessToken().getJwtToken()}`);
  },
  onFailure: (err) => {
    alert(err);
  }
});
Run Code Online (Sandbox Code Playgroud)

CognitoIdentityServiceProvider的一部分aws-sdk,而不是amazon-cognito-identity-js图书馆的一部分。

  • 有什么建议可以捕获令牌过期并刷新它吗? (2认同)