Asp .Net Core, Identity Server 4, проверьте, авторизован ли пользователь без авторизованного атрибута. - PullRequest
0 голосов
/ 06 декабря 2018

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

[Authorize]
public async Task<IActionResult> Index()
{                
    return View("../Secure/Index");
}

Я хочу вернуть другое представление, еслиПользователь не авторизован и не перенаправляет его на сервер идентификации.Вот как я это попробовал.

public async Task<IActionResult> Index()
{                
    if (User == null || User.Identity == null || !User.Identity.IsAuthenticated )
    {
        return View("../Public/Index");
    }

    return View("../Secure/Index");
}

Однако это не работает. User.Identity.IsAuthenticated всегда ложно.Даже когда я был ранее на сервере идентификации и вошел в систему. Кажется, что атрибут [Authorize] делает что-то более вероятное, настройки User.Identity.IsAuthenticated.

Мой вопрос, как мне узнать, что я авторизован безатрибут?

Спасибо

1 Ответ

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

Я потратил три дня, чтобы понять, как это можно сделать, и пришел к выводу ЭТО НЕ МОЖЕТ СДЕЛАТЬ .Действительно отличная работа Microsoft.

Самое близкое, что я получил, - это перенаправление на другой URL: https://stackoverflow.com/a/43631950/4909067 Но, конечно, наименование в .net core 2.1 отличается.

services.AddAuthentication(options =>
{
    ...
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
    {
        ...
        options.Events = new OpenIdConnectEvents()
        {
            OnRedirectToIdentityProvider = async (context) =>
            {
                Console.WriteLine(  );

                if (context.HttpContext.Request.Path.Value != "/Account/SignInWithOpenId")
                {
                    context.HttpContext.Response.Redirect("/public");
                    context.HandleResponse();
                }

                await Task.CompletedTask;
            },            
        };
        ...
    })

Но это не то, что я хочу.Я не хочу менять URL.Я просто хочу обслуживать некоторый контент, когда пользователь вошел в систему и отличается, когда пользователь не вошел в систему . По тому же адресу. Я должен был выбрать узел js вместо этого тупого ядра .net

...