मैं एंटिटी फ्रेमवर्क 5 डाटाबेस फर्स्ट एप्रोच का उपयोग करके एक एमवीसी 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 के पास भेज रहा हूं ।
मेरे पास जो समस्या है वह यह है कि मुझे यकीन नहीं है कि मेरे आवेदन के बाकी हिस्सों में दावों को कैसे नियंत्रित किया जाए, या तो नियंत्रकों में या रेजर व्यूज में।
मैंने इस ट्यूटोरियल में सूचीबद्ध दृष्टिकोण की कोशिश की थी
उदाहरण के लिए, मैंने अपने नियंत्रक कोड में यह दावा करने के लिए कि मानों को पारित करने के लिए उपयोग करने का प्रयास किया है, हालांकि, उपयोगकर्ता। जालिम अशक्त के बराबर है
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
शायद मुझे यहाँ कुछ याद आ रहा है।
अपडेट करें
डारिन के जवाब के आधार पर, मैंने उसका कोड जोड़ा, लेकिन फिर भी मैं क्लेम की पहुंच देखने में विफल रहा। कृपया नीचे स्क्रीनशॉट देखें जो मैं देख रहा हूँ जब पहचान पर मँडरा गया।