1

Windows 10、.NET Core 3.0

我有一个空白的 mvc 项目(dotnet new mvc)。

主页索引:

public async Task<IActionResult> Index()
    {
        if(User.Identity.Name == null) {
            var props = new AuthenticationProperties
            {
                IsPersistent = true,
                ExpiresUtc = DateTime.UtcNow.AddMinutes(30)
            };

            var identity = new ClaimsIdentity(new[]
            {
                new Claim(ClaimTypes.Name, "sometestuser")
            }, CookieAuthenticationDefaults.AuthenticationScheme);
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), props);
        }

        return Content(User.Identity.Name);
    }

Startup.cs(配置服务和配置)

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme);
app.UseAuthentication();

刷新索引时,User.Identity.Name 始终为 null,并且永远不会设置 IsAuthentication。

4

2 回答 2

1

在 Configure 方法中,UseAuthentication 方法应位于 UseMvcWithDefaultRoute 之前。它必须在之前,因为 AuthenticationMiddleware 将在请求到达您的 Index 方法之前设置 HttpContext.User 。

请查看链接 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.2

于 2019-02-04T04:10:42.883 回答
0

您是否尝试过以下操作:

var val = User.FindFirst(ClaimTypes.Name).Value;

这应该检索您正在寻找的内容。

于 2019-02-03T15:46:10.253 回答