Я пытаюсь интегрировать AWS Cognito в веб-сайт.Я пытаюсь заставить пользователя изменить свой пароль.У меня уже был метод для добровольного сброса пароля, и я пытался использовать его для принудительного сброса пароля.Вот метод:
internal async Task<bool> ResetPassword(string username, string oldPassword, string newPassword) {
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials());
CognitoUserPool userPool = new CognitoUserPool(CognitoHelper.POOL_ID, CognitoHelper.CLIENTAPP_ID, provider);
CognitoUser user = new CognitoUser(username, CognitoHelper.CLIENTAPP_ID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest() {
Password = oldPassword
};
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
await user.ChangePasswordAsync(oldPassword, newPassword);
return true;
} // ResetPassword
Когда я вызываю этот метод при добровольном сбросе пароля, он работает нормально.При принудительном сбросе пароля «StartWithSrpAuthAsync» выдает исключение, сообщающее «Требуется сброс пароля для пользователя».Без шуток - вот почему я пытаюсь сменить пароль.
Проблема в том, что метод ChangePasswordAsync требует, чтобы пользователь прошел аутентификацию до его вызова.Я не могу аутентифицировать пользователя, потому что пароль должен быть сброшен, но я не могу изменить пароль, потому что пользователь должен сначала пройти аутентификацию.
Я попытался взломать, чтобы решить мою проблему, поймав "Сброс пароля требуется для пользователя "исключение, надеясь, что пользователь все равно был аутентифицирован.К сожалению, не повезло:
internal async Task<bool> ResetPassword(string username, string oldPassword, string newPassword) {
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials());
CognitoUserPool userPool = new CognitoUserPool(CognitoHelper.POOL_ID, CognitoHelper.CLIENTAPP_ID, provider);
CognitoUser user = new CognitoUser(username, CognitoHelper.CLIENTAPP_ID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest() {
Password = oldPassword
};
try {
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
await user.ChangePasswordAsync(oldPassword, newPassword);
} catch (Exception exp) {
if (exp.Message == "Password reset required for the user") {
await user.ChangePasswordAsync(oldPassword, newPassword);
} else {
throw exp;
} // if else
} // try catch
return true;
} // ResetPassword
Есть мысли?