Opracowuję aplikację internetową MVC 5 przy użyciu metody Entity Framework 5 Database First . Używam OWIN do uwierzytelniania użytkowników. Poniżej przedstawiono moją metodę logowania w kontrolerze konta.
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);
}
Jak widać, tworzę ClaimsIdentity i dodaję do niego kilka oświadczeń, a następnie przekazuję je do OWIN przy użyciu AuthenticationManager w celu wykonania logowania.
Problem, który mam, polega na tym, że nie jestem pewien, jak uzyskać dostęp do oświadczeń w pozostałej części mojej aplikacji, czy to w kontrolerach, czy w widokach Razor.
Wypróbowałem podejście wymienione w tym samouczku
Na przykład próbowałem tego w moim kodzie kontrolera, próbując uzyskać dostęp do wartości przekazanych do oświadczeń, jednak użytkownik.
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
Może czegoś mi tu brakuje.
AKTUALIZACJA
Bazując na odpowiedzi Darina, dodałem jego kod, ale nadal nie widzę dostępu do roszczeń. Poniżej zrzut ekranu pokazujący, co widzę po najechaniu kursorem myszy na tożsamość.