0

全部。谁能帮我理解为什么我得到一个 Uncaught (in promise) TypeError: callback is undefined in the below code?它不会出现在 on success 或 on failure 子句中。

const onSubmitPasscode = (event) => {
    event.preventDefault();

    if (passwordFirst !== passwordSecond) {
      alert('the two inputs provided are not the same');
    } else {
      const user = new CognitoUser({
        Username: email,
        Pool: UserPool
      });

      const authDetails = new AuthenticationDetails({
        Username: email,
        Password: password
      });

      user.authenticateUser(authDetails, {
        onFailure: (err) => {
          console.error('onFailure:', err);
        },
        newPasswordRequired: () => {
          user.completeNewPasswordChallenge(passwordFirst, {
            onFailure: (err) => {
              console.error('onFailure:', err);
            },
            onSuccess: (result) => {
              console.log(passwordFirst);
              console.log('call result: ', result);
              navigate('dashboard');
            }
          });
        }
      });
    }
4

2 回答 2

0

为定义一个onSuccess函数authenticateUser

user.authenticateUser(authDetails, {
  onSuccess: (result) => {
    console.log(result);
  },
  onFailure: (err) => {
    console.error('onFailure:', err);
  },
  newPasswordRequired: () => {
    user.completeNewPasswordChallenge(passwordFirst, {
      onFailure: (err) => {
        console.error('onFailure:', err);
      },
      onSuccess: (result) => {
        console.log(passwordFirst);
        console.log('call result: ', result);
        navigate('dashboard');
      }
    });
  }
}

此外,根据文档newPasswordRequired采用一个签名与您提供的不同的函数。所以我认为你可能真正想要的是:

user.authenticateUser(authDetails, {
  onSuccess: (result) => {
    console.log(passwordFirst);
    console.log('call result: ', result);
    navigate('dashboard');
  }
  onFailure: (err) => {
    console.error('onFailure:', err);
  },
  newPasswordRequired: (userAttributes, requiredAttributes) => {
    /*whatever you want to do when new password is required*/
  }
}
于 2021-12-31T23:14:48.830 回答
0

进一步阅读文档后, userAttributes.email_verified 不允许返回,必须删除。我这样做了。但是 - 我的应用程序仍然无法运行,因为 API 在返回调用中也不接受 phone_number_verified 。我现在有这两行:

const onSubmit = (event) => { // first log in attempt with the temporary passcode OR with permanent changed passcode
    event.preventDefault();

    const authDetails = new AuthenticationDetails({
      Username: email,
      Password: password
    });

    const user = new CognitoUser({
      Username: email,
      Pool: UserPool
    });

    user.authenticateUser(authDetails, {
      onSuccess: (data) => {
        console.log('onSuccess:', data);
        if (location.pathname === '/') {
          navigate('dashboard');
        }
      },
      onFailure: (err) => {
        console.error('onFailure:', err);
      },
      newPasswordRequired: (data) => {
        setNewPasscodeRequired(true); // once this is set to true, my application shows a new component which requests the password twice and tells the user the rules for the passcode
      }
    });
  };

  const onSubmitPasscode = (event) => { // once they submit their new passcode
    event.preventDefault();

    if (passwordFirst !== passwordSecond) {
      alert('the two inputs provided are not the same');
    } else {
      const user = new CognitoUser({
        Username: email,
        Pool: UserPool
      });

      const authDetails = new AuthenticationDetails({
        Username: email,
        Password: password
      });

      user.authenticateUser(authDetails, {
        onFailure: (err) => {
          console.error('onFailure:', err);
        },
        onSuccess: (result) => {
          console.log(result);
        },
        newPasswordRequired: (userAttributes, requiredAttributes) => {
          delete userAttributes.email_verified; // THIS IS NON NEGOTIABLE
          delete userAttributes.phone_number_verified; // THIS IS NON NEGOTIABLE
          user.completeNewPasswordChallenge(passwordFirst, userAttributes, {
            onFailure: (err) => {
              console.error('onFailure:', err);
            },
            onSuccess: (result) => {
              console.log('call result: ', result);
              navigate('dashboard');
            }
          });
        }
      });
    }
于 2022-01-02T17:55:11.287 回答