ฉันกำลังพัฒนาเว็บแอปพลิเคชันMVC 5โดยใช้แนวทางแรกของฐานข้อมูล Entity Framework 5 ฉันใช้OWINสำหรับการรับรองความถูกต้องของผู้ใช้ ด้านล่างนี้แสดงวิธีการเข้าสู่ระบบของฉันภายใน Account Controller ของฉัน
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และเพิ่มการอ้างสิทธิ์หลายรายการจากนั้นส่งต่อไปยังOWINโดยใช้AuthenticationManagerเพื่อทำการลงชื่อเข้าใช้
ปัญหาที่ฉันพบคือฉันไม่แน่ใจว่าจะเข้าถึงการอ้างสิทธิ์ในส่วนที่เหลือของแอปพลิเคชันของฉันได้อย่างไรทั้งในตัวควบคุมหรือในมุมมองมีดโกน
ฉันได้ลองใช้แนวทางที่ระบุไว้ในบทช่วยสอนนี้แล้ว
ตัวอย่างเช่นฉันลองใช้สิ่งนี้ในรหัสคอนโทรลเลอร์ของฉันเพื่อพยายามเข้าถึงค่าที่ส่งผ่านไปยังการอ้างสิทธิ์อย่างไรก็ตามผู้ใช้การอ้างสิทธิ์มีค่าเท่ากับ null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
บางทีฉันอาจจะพลาดอะไรบางอย่างที่นี่
UPDATE
จากคำตอบของดารินฉันได้เพิ่มรหัสของเขา แต่ฉันก็ยังไม่เห็นการเข้าถึงการอ้างสิทธิ์ โปรดดูภาพหน้าจอด้านล่างที่แสดงสิ่งที่ฉันเห็นเมื่อวางเมาส์เหนือตัวตนการอ้างสิทธิ์