❔ Callback Url Always Null
Here's the two functions involved
I don't know why but the returnurl is always null.
public IActionResult ExternalLogin(string provider, string returnurl = null)
{
var redirect = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnurl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirect);
return Challenge(properties, provider);
}
public async Task<IActionResult> ExternalLoginCallback(string returnurl = null, string remoteError = null)
{
if(remoteError != null)
{
ModelState.AddModelError(string.Empty, "Error from external provider");
return View("Login");
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if(info == null)
{
return RedirectToAction("Login");
}
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
if (result.Succeeded)
{
await _signInManager.UpdateExternalAuthenticationTokensAsync(info);
return LocalRedirect(returnurl);
}
else
{
ViewData["ReturnUrl"] = returnurl;
ViewData["ProviderDisplayName"] = info.ProviderDisplayName;
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
return View("ExternalLoginConfirmation", new ExternalLoginViewModel { Email = email });
}
} public IActionResult ExternalLogin(string provider, string returnurl = null)
{
var redirect = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnurl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirect);
return Challenge(properties, provider);
}
public async Task<IActionResult> ExternalLoginCallback(string returnurl = null, string remoteError = null)
{
if(remoteError != null)
{
ModelState.AddModelError(string.Empty, "Error from external provider");
return View("Login");
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if(info == null)
{
return RedirectToAction("Login");
}
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
if (result.Succeeded)
{
await _signInManager.UpdateExternalAuthenticationTokensAsync(info);
return LocalRedirect(returnurl);
}
else
{
ViewData["ReturnUrl"] = returnurl;
ViewData["ProviderDisplayName"] = info.ProviderDisplayName;
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
return View("ExternalLoginConfirmation", new ExternalLoginViewModel { Email = email });
}
}I don't know why but the returnurl is always null.