Check the user according to email before creating an external user.

Resolve #9519
pull/9534/head
maliming 4 years ago
parent 0bdfdfa3a8
commit a46351ca41

@ -230,24 +230,29 @@ namespace Volo.Abp.Account.Web.Pages.Account
//TODO: Handle other cases for result! //TODO: Handle other cases for result!
// Get the information about the user from the external login provider var email = loginInfo.Principal.FindFirstValue(AbpClaimTypes.Email);
var externalLoginInfo = await SignInManager.GetExternalLoginInfoAsync(); if (email.IsNullOrWhiteSpace())
if (externalLoginInfo == null)
{
throw new ApplicationException("Error loading external login information during confirmation.");
}
if (!IsEmailRetrievedFromExternalLogin(externalLoginInfo))
{ {
return RedirectToPage("./Register", new return RedirectToPage("./Register", new
{ {
IsExternalLogin = true, IsExternalLogin = true,
ExternalLoginAuthSchema = externalLoginInfo.LoginProvider, ExternalLoginAuthSchema = loginInfo.LoginProvider,
ReturnUrl = returnUrl ReturnUrl = returnUrl
}); });
} }
var user = await CreateExternalUserAsync(externalLoginInfo); var user = await UserManager.FindByEmailAsync(email);
if (user == null)
{
user = await CreateExternalUserAsync(loginInfo);
}
else
{
if (await UserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey) == null)
{
CheckIdentityErrors(await UserManager.AddLoginAsync(user, loginInfo));
}
}
await SignInManager.SignInAsync(user, false); await SignInManager.SignInAsync(user, false);
@ -261,11 +266,6 @@ namespace Volo.Abp.Account.Web.Pages.Account
return RedirectSafely(returnUrl, returnUrlHash); return RedirectSafely(returnUrl, returnUrlHash);
} }
private static bool IsEmailRetrievedFromExternalLogin(ExternalLoginInfo externalLoginInfo)
{
return externalLoginInfo.Principal.FindFirstValue(AbpClaimTypes.Email) != null;
}
protected virtual async Task<IdentityUser> CreateExternalUserAsync(ExternalLoginInfo info) protected virtual async Task<IdentityUser> CreateExternalUserAsync(ExternalLoginInfo info)
{ {
await IdentityOptions.SetAsync(); await IdentityOptions.SetAsync();

Loading…
Cancel
Save