Saya sedang mengembangkan aplikasi web MVC 5 menggunakan pendekatan Entity Framework 5 Database First . Saya menggunakan OWIN untuk otentikasi Pengguna. Di bawah ini menunjukkan metode Login saya dalam Pengontrol Akun saya.
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);
}
Seperti yang Anda lihat, saya sedang membuat ClaimsIdentity dan menambahkan beberapa klaim ke dalamnya, lalu meneruskannya ke OWIN menggunakan AuthenticationManager untuk masuk.
Masalah yang saya hadapi adalah saya tidak yakin bagaimana cara mengakses klaim di seluruh aplikasi saya, baik di Controllers atau di Razor Views.
Saya telah mencoba pendekatan yang tercantum dalam tutorial ini
Misalnya, saya mencoba ini di kode Pengontrol saya dalam upaya untuk mendapatkan akses ke nilai yang diteruskan ke Klaim, namun, pengguna. Klaim sama dengan null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
Mungkin saya melewatkan sesuatu di sini.
MEMPERBARUI
Berdasarkan jawaban Darin, saya menambahkan kodenya tetapi tetap saja saya gagal melihat akses ke Klaim. Silakan lihat tangkapan layar di bawah ini yang menunjukkan apa yang saya lihat ketika mengarahkan kursor ke atas identitas.