V10: Dont delete member on failed autolink (#12996)

* Disapprove member instead of delete if failed autolink

* Update to not disable the member when external login fails, but move the logic to protected method, to make it easy to extend.

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
This commit is contained in:
Nikolaj Geisle
2022-10-05 07:19:22 +01:00
committed by GitHub
parent 99c7f966bd
commit ae6bee7b0b

View File

@@ -303,19 +303,16 @@ public class MemberSignInManager : UmbracoSignInManager<MemberIdentityUser>, IMe
return await SignInOrTwoFactorAsync(autoLinkUser, false, loginInfo.LoginProvider);
}
// If this fails, we should really delete the user since it will be in an inconsistent state!
IdentityResult? deleteResult = await UserManager.DeleteAsync(autoLinkUser);
if (deleteResult.Succeeded)
{
var errors = linkResult.Errors.Select(x => x.Description).ToList();
return AutoLinkSignInResult.FailedLinkingUser(errors);
}
else
{
// DOH! ... this isn't good, combine all errors to be shown
var errors = linkResult.Errors.Concat(deleteResult.Errors).Select(x => x.Description).ToList();
return AutoLinkSignInResult.FailedLinkingUser(errors);
}
// If this fails, we should disapprove the member,as it is now in an inconsistent state.
return await HandleFailedLinkingUser(autoLinkUser, linkResult);
}
protected Task<AutoLinkSignInResult> HandleFailedLinkingUser(MemberIdentityUser autoLinkUser, IdentityResult linkResult)
{
var errors = linkResult.Errors.Select(x => x.Description).ToList();
Logger.LogError("Failed to external link user. The following errors happened: {errors}", errors);
return Task.FromResult(AutoLinkSignInResult.FailedLinkingUser(errors));
}
private void LogFailedExternalLogin(ExternalLoginInfo loginInfo, MemberIdentityUser user) =>