Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加自定义索赔类型_C#_Asp.net Mvc 5_Owin - Fatal编程技术网

C# 添加自定义索赔类型

C# 添加自定义索赔类型,c#,asp.net-mvc-5,owin,C#,Asp.net Mvc 5,Owin,OWIN身份验证新手,发现很难创建自己的OWIN声明类型 事情是这样的。我需要添加像“GroupID”这样的自定义声明,以便在不同的页面上轻松访问它 我在登录时做了类似的操作 public ActionResult Login(LoginViewModel model, string returnUrl) { UserViewModel userModel = new UserViewModel(); if (!ModelState.IsValid) {

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);
}
我可以毫无问题地获取用户名和全名,但组id会导致对象空错误


希望有人能帮我找到正确答案。

我已经检查了你的代码,里面没有问题

以下是我想让你做的:

检查缓存是否已清除。如果未清除缓存,则可以 按如下方式清除它:CTRL+SHIFT+DELETE

这是因为在您登录期间,它将保存在cookies中,但不清楚,而且新声明没有保存在cookies中


或者尝试检查您的UserGroupID是否有值。

您可以这样使用类型和值

claims.Add(new Claim(type: "GroupID", value: curUser.UserGroupID.ToString()));

您是否可以查看新的索赔是否已添加到UserClaims DB表中?UserClaims DB表在哪里?@TheProvost现在提出问题-您是否可以添加任何其他索赔?说add
claims.add(新的claims(“MyTestClaim”,“testvalue”)
您可以检索它吗?还可以尝试用以下内容替换登录方法:
AuthenticationManager.SignIn(newauthenticationproperties(){IsPersistent=false},id)。我已经为我的一个项目设置了几乎相同的设置,并且工作正常。还有一件事-在登录之前尝试注销:
AuthenticationManager.SignOut(DefaultAuthenticationTypes.applicationcokie)什么意思!!!!新手犯的错误。我使用过不同的浏览器,所以我认为cookies不是问题所在。谢谢这是因为otang Mongos的热键非常有用!
claims.Add(new Claim(type: "GroupID", value: curUser.UserGroupID.ToString()));