Entity Framework 5 Database First 접근 방식을 사용하여 MVC 5 웹 응용 프로그램을 개발 중 입니다. 내가 사용하고 OWIN을 사용자의 인증을 위해. 아래는 내 계정 컨트롤러 내의 로그인 방법을 보여줍니다.
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user != null)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person"));
identity.AddClaim(new Claim(ClaimTypes.Sid, user.userID)); //OK to store userID here?
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
보시다시피 ClaimsIdentity를 만들고 여기에 여러 클레임을 추가 한 다음 AuthenticationManager 를 사용하여 OWIN에 전달 하여 로그인을 수행합니다.
내가 가진 문제는 컨트롤러 또는 Razor 뷰에서 내 애플리케이션의 나머지 부분에서 클레임에 액세스하는 방법을 잘 모르겠다는 것입니다.
이 튜토리얼에 나열된 접근 방식을 시도했습니다.
예를 들어, 클레임에 전달 된 값에 대한 액세스를 얻기 위해 컨트롤러 코드에서 이것을 시도했지만 사용자는 null입니다.
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
아마도 여기에 뭔가 빠진 것 같습니다.
최신 정보
Darin의 답변에 따라 그의 코드를 추가했지만 여전히 클레임에 대한 액세스를 볼 수 없습니다. ID 위로 마우스를 가져 갔을 때 표시되는 내용을 보여주는 아래 스크린 샷을 참조하십시오.