OWIN身份验证的新手,发现很难创建自己的owin声明类型。
继承人的事情。我需要添加自定义声明,例如" GroupID"所以我可以在不同的页面轻松访问它。
我在登录
中做了类似的事情public ActionResult Login(LoginViewModel model, string returnUrl)
{
UserViewModel userModel = new UserViewModel();
if (!ModelState.IsValid)
{
return View(model);
}
if(CommonHelper.ValidateADUser(model.Username,model.Password))
{
UserViewModel curUser = userModel.GetUserDetails(model.Username);
if (curUser != null)
{
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.WindowsAccountName, curUser.Username));
claims.Add(new Claim(ClaimTypes.Name,curUser.Fullname));
claims.Add(new Claim(ClaimTypes.Role, ""));
claims.Add(new Claim("GroupID", curUser.UserGroupID.ToString()));
var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var ctx = Request.GetOwinContext();
AuthenticationManager.SignIn(id);
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid login attempt.");
}
return View(model);
}
在我的登录部分,我试图通过这样做获得价值
public ActionResult _LoginPartial()
{
var identity = (ClaimsIdentity)User.Identity;
TempData["curUserFullName"] = identity.FindFirst(ClaimTypes.Name).Value;
string s= identity.FindFirst("GroupID").Value;
return PartialView();
}
我可以毫无问题地获取用户名和全名,但是组ID会导致对象出现空错误。
希望有人能够推动我找到正确的答案。
答案 0 :(得分:21)
我检查过您的代码时没有问题。
这就是我想要你做的事情:
检查缓存是否清除。如果您的缓存未清除,您可以 清除它像这样: CTRL + SHIFT + DELETE
这是因为在您登录时,它会保存在Cookie中并且不清楚,并且恰好新的声明未保存在Cookie中。
或尝试检查 UserGroupID 是否有值。
答案 1 :(得分:0)
您可以像这样使用类型和值。
claims.Add(new Claim(type: "GroupID", value: curUser.UserGroupID.ToString()));