3

我想在ASP.NET Core MVC中的cookie中存儲userId。我在哪裏可以訪問它?從核心MVC中的Cookie中的聲明中檢索用戶標識

登錄:

var claims = new List<Claim> { 
    new Claim(ClaimTypes.NameIdentifier, "testUserId") 
}; 

var userIdentity = new ClaimsIdentity(claims, "webuser"); 
var userPrincipal = new ClaimsPrincipal(userIdentity); 
HttpContext.Authentication.SignInAsync("Cookie", userPrincipal, 
    new AuthenticationProperties 
    { 
     AllowRefresh = false 
    }); 

註銷:

User.Identity.GetUserId(); // <-- 'GetUserId()' doesn't exists!? 

ClaimsPrincipal user = User; 
var userName = user.Identity.Name; // <-- Is null. 

HttpContext.Authentication.SignOutAsync("Cookie"); 

有可能在MVC 5 ------------------ - >

登錄:

// Create User Cookie 
var claims = new List<Claim>{ 
     new Claim(ClaimTypes.NameIdentifier, webUser.Sid) 
    }; 

var ctx = Request.GetOwinContext(); 
var authenticationManager = ctx.Authentication; 
authenticationManager.SignIn(
    new AuthenticationProperties 
    { 
     AllowRefresh = true // TODO 
    }, 
    new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie) 
); 

獲取用戶名:

public ActionResult TestUserId() 
{ 
    IPrincipal iPrincipalUser = User; 
    var userId = User.Identity.GetUserId(); // <-- Working 
} 

更新 - 這是空-------

userId索賠的新增截圖也null

enter image description here

回答

7

你應該能夠通過的HttpContext獲得它:

var userId = context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; 

在這個例子中背景是的HttpContext。

的Startup.cs(只是基礎知識作爲模板網站):

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddIdentity<ApplicationUser, IdentityRole>() 
     .AddEntityFrameworkStores<ApplicationDbContext>() 
     .AddDefaultTokenProviders(); 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app) 
{ 
    app.UseIdentity(); 
    app.UseMvc(); 
} 
+0

以後將測試。但我很確定我嘗試了「User.Claims」,它們是「null」。我不知道爲什麼:) – radbyx

+0

它也是空的。我確定你的路線是正確的,但是我必須需要別的東西。像StartUp.cs中的某些東西,我還沒有添加。 ASP.NET Core MVC對於我來說是新手,所以我可能沒有添加所有必要的依賴關係,因爲要求工作。 – radbyx

+0

查看已添加屏幕截圖:) – radbyx