Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# OWIN/Identity框架_C#_Asp.net Identity_Owin - Fatal编程技术网

C# OWIN/Identity框架

C# OWIN/Identity框架,c#,asp.net-identity,owin,C#,Asp.net Identity,Owin,我有一个带有SignIn方法的类库,该方法具有很多逻辑,以便成员登录。我面临的问题是,我在身份中添加了一个全名声明,它可以正常工作,但一旦用户注销并再次登录,声明就消失了 如果我检查用户标识,则在第二次登录时声明可用,直到命中RedirectToAction方法,那么所有自定义声明都不再位于用户标识中。这包括全名和角色声明 如果将ASP.NET Identity 2与EF一起使用,则应通过UserManager添加声明,以便将其持久化 userManager.AddClaim(userId, n

我有一个带有SignIn方法的类库,该方法具有很多逻辑,以便成员登录。我面临的问题是,我在身份中添加了一个全名声明,它可以正常工作,但一旦用户注销并再次登录,声明就消失了

如果我检查用户标识,则在第二次登录时声明可用,直到命中RedirectToAction方法,那么所有自定义声明都不再位于用户标识中。这包括全名和角色声明


如果将ASP.NET Identity 2与EF一起使用,则应通过UserManager添加声明,以便将其持久化

userManager.AddClaim(userId, new Claim(claimType,claimValue));

请注意,如果您对当前登录的用户添加声明,您需要再次登录该用户,以便将新信息放入cookie中。

您是否在下一个请求中检查身份?i、 e.不是设置身份并将其登录的当前请求?@Shoe,您将如何在下一个请求中检查身份?我觉得奇怪的是,第一次登录就可以完美地工作,但是如果用户注销然后再次登录,则声明将在帐户控制器的RedirectToAction上删除。我不从类库重定向。User.Identity获取用户的当前标识。重定向后,您可以检查索赔对象。我更改了我的标识。AddClaimnew ClaimTypes。角色,角色;到_userManager.AddClaimuser.Id,新的ClaimClaimTypes.Role,Role;这个过程现在100%有效。谢谢@pysco68。深入研究后,我发现identity.AddClaim使用mscorlib,usermanager使用Microsoft.AspNet.identity.Core和claimstore。简而言之……不要在ASP.Net identity 2中直接使用identity。@Inox您可以直接使用声明。事实上,如果您查看UserManager中引用的类,您将看到它们指向mscorlib。@Shoe,这也是我所做的,但是由于未知原因,索赔存储中的索赔设置不正确。但是用户管理器addclaim方法显然是正确的。当我直接使用它时,我会在同一个会话中与同一个用户登录、注销和再次登录时出现奇怪的行为。
userManager.AddClaim(userId, new Claim(claimType,claimValue));