添加自定义索赔类型

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (17)

新的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会导致对象空错误。

提问于
用户回答回答于

你要做的是:

检查缓存是否已清除。如果您的缓存未被清除,您可以这样清除它:Ctrl+Shift+删除

这是因为在您登录期间,它将保存在cookie中,并且不清楚,而且碰巧新的声明没有保存在cookie中。

或者尝试检查UserGroupID有价值。

扫码关注云+社区