>

aws Amplify와 함께 사용자 정의 UI를 사용하려고하는데 Auth.completeNewPassword에 문제가 있습니다. 이 방법을 사용하려고하면 Error in v-on handler: "TypeError: Cannot read property 'username' of null 오류가 발생합니다. .

이전에 주어진 UI를 사용해 본 결과, 관리자가 Cognito 사용자를 만들면 처음 로그인 할 때 '새 비밀번호'양식으로 전송된다는 것을 알고 있습니다. 그러나 Amplify 문서의 예제에는 사용자가 새 비밀번호가 필요한 것을 발견하면 signNew 메소드가 completeNewPassword 메소드를 즉시 호출합니다.

다음 스 니펫은 Amazon 문서에서 직접 가져온 것입니다.

import { Auth } from 'aws-amplify';
Auth.signIn(username, password)
.then(user => {
    if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
        const { requiredAttributes } = user.challengeParam; // the array of required attributes, e.g ['email', 'phone_number']
        Auth.completeNewPassword(
            user,               // the Cognito User Object
            newPassword,       // the new password
            // OPTIONAL, the required attributes
            {
              email: 'xxxx@example.com',
              phone_number: '1234567890'
            }
        ).then(user => {
            // at this time the user is logged in if no MFA required
            console.log(user);
        }).catch(e => {
          console.log(e);
        });
    } else {
        // other situations
    }
}).catch(e => {
    console.log(e);
});

동일한 TypeError 결과로 몇 가지 다른 방법으로 시도했습니다. completeNewPassword 메서드를 개별적으로 호출하고 사용자를 변수로 저장하고 전달한 다음 다시 로그인하여 completeNewPassword 등에 해당 사용자를 전달하면 상관 없습니다. 매번 같은 TypeError.

예를 들어, 다음 방법은 로그인 버튼을 처음 클릭 할 때 '사용자'개체를 올바르게 기록하지만 새 비밀번호를 제출하려고 할 때 동일한 버튼을 클릭하면 해당 줄 이전에 실패합니다.

signIn () {
    Auth.signIn(this.user_name, this.password)
    .then(user => {
        if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
        console.log(user)
        const { requiredAttributes } = user.challengeParam;
        this.$parent.$parent.pageStatus.passwordSetPanel = true;
        Auth.completeNewPassword(
            user,
            this.newPassword
        )
        }
    })
},

추가 정보 :

<올>
  • 프레임 워크는 Vue입니다
  • 주어진 UI로 신규 사용자의 새 비밀번호를 확인할 수있었습니다
  • 'username'TypeError가 js에서 나오지 않지만 사용자 약속 내의 username 매개 변수를 참조합니다 (사용자 이름을 원하는 user_name을 확인하고 전달하려고하지 않습니다)
  • 수정

    이 코드로 반 작업 솔루션을 찾도록 관리했습니다 :

    signIn () {
        this.$parent.$parent.pageStatus.loginPanel = false;
        this.$parent.$parent.loading = true;
        Auth.signIn(this.user_name, this.password)
        .then(async user => {
            if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
            const loggedUser = await Auth.completeNewPassword(
                user,
                this.password,
            )
            this.$parent.$parent.pageStatus.passwordSetPanel = true
            }
        })
    }
    
    

    이것은 사용자를 업데이트하기 위해 관리하지만 암호를 this.password (원래 변경 될 암호)로 설정해야 작동합니다. 문제는 Amplify가 동일한 기능을 사용하여 signIn과 completeNewPassword를 호출하기를 원한다는 것입니다. 그러나 이러한 UI는 두 개의 다른 패널로 분할되어야합니다.


  • 이전 amazon web services - missingrequiredparameter - 매개 변수에 필수 키 'functionname'이 누락되었습니다
  • 다음 python - 출력을 파일로 내보내기, 날짜별로 파일 이름 증가