Set LoginProvider when ExternalLoginConfirmation fails (#187)

Addresses #98
This commit is contained in:
Jass Bagga 2017-12-12 11:27:11 -08:00 committed by GitHub
parent 4d2e642b94
commit 26ea920fa6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 13 deletions

View File

@ -72,7 +72,7 @@ namespace Company.WebApplication1.Pages.Account
}
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor : true);
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
if (result.Succeeded)
{
_logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
@ -100,14 +100,15 @@ namespace Company.WebApplication1.Pages.Account
public async Task<IActionResult> OnPostConfirmationAsync(string returnUrl = null)
{
// Get the information about the user from the external login provider
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
throw new ApplicationException("Error loading external login information during confirmation.");
}
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
throw new ApplicationException("Error loading external login information during confirmation.");
}
var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user);
if (result.Succeeded)
@ -126,6 +127,7 @@ namespace Company.WebApplication1.Pages.Account
}
}
LoginProvider = info.LoginProvider;
ReturnUrl = returnUrl;
return Page();
}

View File

@ -307,14 +307,15 @@ namespace Company.WebApplication1.Identity.Controllers
[ValidateAntiForgeryToken]
public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginViewModel model, string returnUrl = null)
{
// Get the information about the user from the external login provider
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
throw new ApplicationException("Error loading external login information during confirmation.");
}
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
throw new ApplicationException("Error loading external login information during confirmation.");
}
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user);
if (result.Succeeded)
@ -327,9 +328,11 @@ namespace Company.WebApplication1.Identity.Controllers
return RedirectToLocal(returnUrl);
}
}
AddErrors(result);
}
ViewData["LoginProvider"] = info.LoginProvider;
ViewData["ReturnUrl"] = returnUrl;
return View(nameof(ExternalLogin), model);
}