首页 > 解决方案 > Angular / AWS Cognito 用户注册错误 - “未知错误,来自 fetch 的响应正文是:未定义”

问题描述

在尝试在我的 Angular 7 应用程序中注册新用户时收到此响应后,我已经看到之前报告的 Cognito 身份验证错误,通常也与用户注册和确认有关。

但是,我还没有看到任何可能在 Angular 应用程序中起作用的建议,并且之前建议的任何解决方案都失败了,包括添加“node-fetch”模块。

我在尝试userPool.signUp()cognitoUser.confirmRegistration()方法时收到错误,即使每个都成功地注册/确认用户。

register.component.ts:

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import fetch from 'node-fetch';
import * as AmazonCognitoIdentity from 'amazon-cognito-identity-js';
import { AuthService } from '@app/services/auth/auth.service';

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.scss']
})

export class RegisterComponent implements OnInit {

  fetch;
  attributes: AmazonCognitoIdentity.CognitoUserAttribute[];

  email: string;
  password: string;
  confirmationCode: string;

  constructor(private auth: AuthService, public router: Router) {
    this.attributes = [];
    this.fetch = fetch;
  }

  ngOnInit() {

  }

  register() {
    this.attributes.push(new AmazonCognitoIdentity.CognitoUserAttribute({
        Name: 'email',
        Value: this.email
    }))

    this.auth.userPool.signUp(this.email, this.password, this.attributes, null, function(err, res) {
        if (err) {
            alert(err.message || JSON.stringify(err));
            return;
        } else {
            console.log('Username is' + res.getUsername());
        }
    })
  }

  confirmRegistration() {
    const userData = {
        Username: this.email,
        Pool: this.auth.userPool
    }

    let cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    cognitoUser.confirmRegistration(this.confirmationCode, true, function(err, res) {
        if (err) {
            alert(`Error confirming registration: ${err.message}`);
            console.error('Error confirming registration:', err);
        } else {
            console.log('User registration confirmed', res);
            this.auth.user = cognitoUser;
        }
    })
  }

  resendConfirmationCode() {
    const userData = {
        Username: this.email,
        Pool: this.auth.userPool
    }

    let cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    cognitoUser.resendConfirmationCode(function(err, res) {
        if (err) {
            alert(err.message || JSON.stringify(err));
            console.log('Error sending confirmation code:', err);
        } else {
            console.log(`Re-sent confirmation code to email address '${this.email}'`);
        }
    })
  }

}

标签: angularamazon-web-servicesaws-lambdaamazon-cognitoangular7

解决方案


推荐阅读