我正在開發一個MVC 5 Web應用程序使用實體框架5數據庫優先方法。我正在使用OWIN進行用戶驗證。以下顯示我的帳戶控制器中的我的登錄方法。MVC 5訪問聲明標識用戶數據
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執行的標誌。
的我遇到的問題是我不確定如何訪問我的應用程序的其餘部分的聲明,無論是在控制器還是在Razor Views中。
我曾但是試圖在本教程中
例如,我試圖以訪問傳遞到索賠值嘗試這在我的控制器代碼中列出的方法,該user.Claims等於null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
也許我在這裏錯過了一些東西。
UPDATE
根據達林的回答,我加了他的代碼,但我仍看不到獲得索賠。請看下面的屏幕截圖,展示我在身份超過時看到的內容.Claims。
你能確認cookie是由瀏覽器發回嗎?也許你的安全設置需要SSL? – leastprivilege
@leastprivilege謝謝,我現在來看看。我發現這個問題在Stackoverflow,http://stackoverflow.com/questions/20319118/i-cant-seem-to-get-a-very-basic-cookie-login-example-to-work-with-mvc5-and -owin?rq = 1這與我所遇到的完全相同,但不幸的是沒有回答:( – tgriffiths
你的OWIN組件是如何初始化的? –