asp. net core 3.1 сломал User.Identity.IsAuthenticated? - PullRequest
0 голосов
/ 26 марта 2020

Я только что перешел с asp. net ядро ​​2.2 на 3.1, и некоторые вещи просто не работают, как раньше.

Одна проблема - аутентификация пользователя, то, что раньше работало, больше не работает .

Вот моя проверка подлинности, и она работает как для asp. net core 2.2 и 3.1.

@{
    if (User.Identity.IsAuthenticated)
    {
        Layout = "_LayoutLoggedIn";
    }
    else
    {
        Layout = "_LayoutLoggedOut";
    }
}

Так что строка: User.Identity.IsAuthenticated работает для вышеупомянутого, всегда.

Но мой код аутентификации не работает при использовании 3.1, или я понял это только сейчас.

    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> SignInUser(UserModel user, bool rememberMe)
    {
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(ClaimTypes.Name, user.Email),
            new Claim(ClaimTypes.Email, user.Email),
        };

        // add roles
        var roleList = await userService.UserRoles(user.Email);
        foreach (var role in roleList)
        {
            var claim = new Claim(ClaimTypes.Role, role.Role);
            claims.Add(claim);
        }

        var identity = new ClaimsIdentity(claims,  CookieAuthenticationDefaults.AuthenticationScheme);
        var principal = new ClaimsPrincipal(identity);

        Task task = HttpContext.SignInAsync(principal, new AuthenticationProperties
        {
            IsPersistent = rememberMe
        });
        await task;

        if (task.IsCompletedSuccessfully)
        {
            if (!User.Identity.IsAuthenticated)
            {
                // identity.IsAuthenticated works?
                System.Console.WriteLine("BUG !!!!"); <!---
            }
            return RedirectToAction("Index", "Home");
        }
        else
        {
            System.Console.WriteLine("Failed to Sign in");
        }

        return RedirectToAction("Index", "Home");
    }

}

В приведенном выше коде User.Identity.IsAuthenticated оценивает слишком ложно, в то время как identity.IsAuthenticated оценивает слишком true.

Я не проверял это раньше asp. net 2.2, но подозреваю, что 3.1 сломал это.

И почему User.Identity.IsAuthenticated будет работать, когда я загружаю свои макеты на основе на статус входа, а не во время аутентификации пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...