添加自定义声明类型

The*_*ost 29 c# owin asp.net-mvc-5

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);
}
Run Code Online (Sandbox Code Playgroud)

在我的登录部分,我试图通过这样做获得价值

public ActionResult _LoginPartial()
{
    var identity = (ClaimsIdentity)User.Identity;
    TempData["curUserFullName"] = identity.FindFirst(ClaimTypes.Name).Value;

    string s= identity.FindFirst("GroupID").Value;
    return PartialView();
}
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地获取用户名和全名,但组ID会导致对象null错误.

希望有人可以轻推我正确的答案.

kwi*_*gko 21

我检查过您的代码时没有问题.

这是我想要你做的:

检查缓存是否清除.如果您的缓存未清除,您可以清除它:CTRL + SHIFT + DELETE

这是因为在您登录时,它将保存在cookie中并且不清楚,并且恰好新的声明未保存在cookie中.

或者尝试检查UserGroupID是否具有值.

  • 什么啊!!!!菜鸟错误。我使用过不同的浏览器,所以我认为 cookie 不是问题。谢谢!!! (3认同)
  • 因为otang monggos (3认同)

小智 9

您可以像这样使用类型和值。

claims.Add(new Claim(type: "GroupID", value: curUser.UserGroupID.ToString()));
Run Code Online (Sandbox Code Playgroud)