Почему User.Identity.IsAuthenticated всегда верно даже после выхода из системы - PullRequest
0 голосов
/ 31 декабря 2018

Я работаю над приложением AspnetCore 2.1 MVC, оно имеет встроенную аутентификацию Windows.Я реализовал функцию входа в систему, выхода из системы с помощью await HttpContext.SignInAsync ().это проверка подлинности на основе файлов cookie, срок действия файлов cookie истекает через указанное время, которое я предоставляю.

Моя проблема в том, что я должен скрыть выход из панели навигации после выхода пользователя из системы.но в _layout.cshtml @ User.Identity.Is подлинность всегда верна, даже если пользователь выходит из системы.Любая помощь ?ниже приведен код, который я использую

<div class="navbar-collapse collapse">
            @if(User.Identity.IsAuthenticated)
            {
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                    <li><a asp-area="" asp-controller="InitiatedCases" asp-action="Index">Initiated Cases</a></li>
                    <li><a asp-area="" asp-controller="SubmittedCases" asp-action="Index">Submitted Cases</a></li>
                    <li><a asp-area="" asp-controller="UserAccessLogs" asp-action="Index">User Access Log</a></li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li><a asp-controller="Account" asp-action="Logout">Logout</a></li>
                    <li><p class="nav navbar-text navbar-right">@User.Identity.Name!</p></li>

                </ul>
            }
            else
            {
                <p></p>

            }

            </div>

ниже указан логин

var usrRole = _dbContext.UserAccess.Where(r => r.UserId == loginUser.UserId).FirstOrDefault();
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);

identity.AddClaim(new Claim(ClaimTypes.Name, loginUser.UserId.ToString()));
identity.AddClaim(new Claim("DisplayName", loginUser.UserId));

if (usrRole != null)
{
    identity.AddClaim(new Claim(ClaimTypes.Role, usrRole.UserRole.ToString()));
}

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme,
    new ClaimsPrincipal(identity),
    new AuthenticationProperties
    {
        IsPersistent = true,
        IssuedUtc = DateTime.Now,
        ExpiresUtc = DateTime.Now.AddMinutes(_iconfiguration.GetValue<double>("Session:TimeOutInMinutes")),
        AllowRefresh = false
    });

1 Ответ

0 голосов
/ 31 декабря 2018

Я думаю, вы можете использовать встроенную аутентификацию Windows - хотя я не уверен.

Браузер использует встроенную проверку подлинности Windows - это означает, что он автоматически регистрирует пользователя, используя его учетные данные Windows, - без запроса.

Вот почему IsAuthenticated всегда имеет значение.

Дополнительные мысли: Я не пробовал приведенный ниже код, но есть нечто, называемое IISServerOptions.Вы можете попробовать их, чтобы проверить, работает ли это для вас.

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...