I am really in need of help and hit the road block . Please help me out.
Using amazon-cognito-identity-js how do I setup MFA (SMS) setUserMfaPreference on demand after login in angular.
After I login , a customer can enable / disable mfa based on their preferences. But all references I see are during the login or while registering a user. My problem is , user is already logged in and I don't want to use authenticateUser method like I did below. Can I use any id token to validate or some session token to say that it is valid request .Please let me know if you have any leads.
`
`import {
CognitoUser,
CognitoUserPool,
AuthenticationDetails,
CognitoUserSession,
CognitoUserAttribute
} from 'amazon-cognito-identity-js';
setUserMfaPreference(request:any): Promise<any> {
return new Promise((resolve,reject) => {
const params = {
UserPoolId: environment.cognitoUserPoolId,
Username: request['username'],
SMSMfaSettings: {
Enabled: true,
PreferredMfa: true,
},
};
let userPool = new CognitoUserPool(CognitoAuthService.POOL_DATA);
console.log("userPool"+userPool);
var userData = {
Username: request.userName,
Pool: userPool,
};
let cognitoUser = new CognitoUser(userData);
return new Promise((resolve,reject) => {
let authenticationData = {
Username : request.userName,
Password : "XXXXXXX",
};
const authenticationDetails = new AuthenticationDetails(authenticationData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (session) => {
// Step 2: User is authenticated. Set the MFA preference.
const smsMfaSettings = {
PreferredMfa: true,
Enabled: true,
};
cognitoUser.setUserMfaPreference(smsMfaSettings, null, function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
} else {
console.log('MFA preference set successfully:', result);
}
});
},
onFailure: (err) => {
console.log('Error authenticating user:', err);
},
});
});
});
}`