У вас есть выбор, чтобы определить, как эта ситуация будет управляться.Технически, это все ваш выбор, поскольку внешняя аутентификация будет рассматриваться только как внешний токен.Вот имплантация по умолчанию (или, по крайней мере, как она обрабатывается в моем последнем проекте, не помню).
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
if (remoteError != null)
{
return RedirectToAction(nameof(Login));
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
return RedirectToAction(nameof(Login));
}
// 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);
if (result.Succeeded)
{
_logger.LogInformation("User logged in with {Name} provider.", info.LoginProvider);
return RedirectToLocal(returnUrl);
}
else
{
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
var isEmailAlreadyPresent = await _userManager.FindByEmailAsync(email);
if (isEmailAlreadyPresent == null)
{
var user = new User { UserName = email, Email = email };
var createUserResult = await _userManager.CreateAsync(user);
if (createUserResult.Succeeded)
{
createUserResult = await _userManager.AddLoginAsync(user, info);
if (createUserResult.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
_logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
return RedirectToLocal(returnUrl);
}
}
}
else
{
var addLoginAsyncResult = await _userManager.AddLoginAsync(isEmailAlreadyPresent, info);
if (!result.Succeeded)
{
}
await _signInManager.SignInAsync(isEmailAlreadyPresent, isPersistent: false);
_logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
return RedirectToLocal(returnUrl);
}
}
return RedirectToLocal(returnUrl);
}
Как вы можете видеть, это действительно зависит от того, как вы хотите реализовать это.И если ваш вопрос касается наилучшего способа сделать это, ну, это зависит от вашей философии.Но уверены ли вы, что такая ситуация будет часто происходить или это ситуация «на всякий случай»?