UserIdをASP.NETCoreMVCの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)
);
ユーザーIDの取得:
public ActionResult TestUserId()
{
IPrincipal iPrincipalUser = User;
var userId = User.Identity.GetUserId(); // <-- Working
}
更新-nullであるクレームのスクリーンショットを追加-------
userId
もnull
です。
HttpContextを介して取得できるはずです。
var userId = context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
例ではcontextはHttpContextです。
Startup.cs(テンプレートWebサイトと同様の基本):
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseIdentity();
app.UseMvc();
}
FindFirst メソッドを使用して ClaimsPrincipal クラス:
var userId = context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;