Entity Framework 5 Database First yaklaşımını kullanarak bir MVC 5 web uygulaması geliştiriyorum. Kullanıcıların kimlik doğrulaması için OWIN kullanıyorum . Aşağıda Hesap Denetleyicimdeki Oturum Açma yöntemimi gösteriliyor.
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);
}
Gördüğünüz gibi bir ClaimsIdentity oluşturuyorum ve ona birkaç talep ekliyorum, ardından oturum açma işlemini gerçekleştirmek için AuthenticationManager'ı kullanarak OWIN'e iletiyorum .
Yaşadığım sorun, uygulamamın geri kalanında, Denetleyicilerde veya Razor Görünümlerinde taleplere nasıl erişeceğimi bilmememdir.
Bu öğreticide listelenen yaklaşımı denedim
Örneğin, bunu Kontrolör kodumda Taleplere aktarılan değerlere erişme girişiminde denedim, ancak kullanıcı.Claims eşittir null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
Belki de burada bir şey eksik.
GÜNCELLEME
Darin'in cevabına dayanarak, kodunu ekledim ama yine de Taleplere erişimi göremiyorum. Lütfen kimliğin üzerine geldiğimde gördüklerimi gösteren aşağıdaki ekran görüntüsüne bakın.