Это метод обратного вызова:
Код: Выделить всё
[AllowAnonymous]
[HttpGet("ExternalLoginCallback")]
public async Task ExternalLoginCallback(string? returnUrl = null, string? remoteError = null)
{
returnUrl ??= Url.Content("~/");
LoginViewModel loginViewModel = new ()
{
ReturnUrl = returnUrl,
ExternalLogins = (await signInManager.GetExternalAuthenticationSchemesAsync()).ToList()
};
if (remoteError != null)
{
ModelState
.AddModelError(string.Empty, $"Error desde el proveedor externo: {remoteError}");
loginViewModel.SetError(remoteError);
return View("Login", loginViewModel);
}
// Get the login information about the user from the external login provider
var info = await signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
ModelState
.AddModelError(string.Empty, "Error al cargar la información del login externo.");
loginViewModel.SetError("Error al cargar la información del login externo.");
return View("Login", loginViewModel);
}
// If the user already has a login (i.e if there is a record in AspNetUserLogins
// table) then sign-in the user with this external login provider
var signInResult = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
var userName = info.Principal.FindFirstValue(ClaimTypes.Email);
if (signInResult.Succeeded)
{
if (userName != null)
{
await SetLastLoggedOnTime(userName);
var user = await userManager.FindByNameAsync(userName);
if (user != null)
await userManager.UpdateSecurityStampAsync(user);
}
return LocalRedirect(returnUrl);
}
else
{
// Verifica que el usuario exista. Si existe, agrega el login y autentica
var creado = userName == null ? null : await usuarioService.CreateUserFromExternal(userName, info);
if (creado != null)
{
await userManager.AddLoginAsync(creado, info);
await signInManager.SignInAsync(creado, isPersistent: false);
if (userName != null)
await SetLastLoggedOnTime(userName);
return LocalRedirect(returnUrl);
}
else
{
loginViewModel.Notification = new Integration.ViewModels.MessageViewModel
{
Type = Integration.ViewModels.AlertTypes.Danger
};
if (signInResult.IsLockedOut)
loginViewModel.SetError("El usuario está bloqueado.");
else if (signInResult.IsNotAllowed)
loginViewModel.SetError("El usuario no está autorizado para ingresar.");
else
loginViewModel.SetError("El usuario no está registrado en la plataforma.");
}
}
return View("Login", loginViewModel);
}
Код: Выделить всё
IsAuthenticatedСвойство Что здесь не так?
Что здесь не так? p>
Обратите внимание: когда я вижу объект info после внешней аутентификации, IsAuthenticated отображается как true.

А также User.Identity.IsAuthenticated:

Только при выполнении перенаправления тот целевая страница имеет User.Identity.IsAuthenticated = false
У меня есть этот код в пользовательском атрибуте AuthorizeAttribute. На этом этапе я вижу, что свойство неверно:

Как я уже сказал, если я изменю URL-адрес браузера на защищенную страницу, результат будет следующий:

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-i-refres
Мобильная версия