我创建了一个自定义主体类
public class FacebookPrincipal : ClaimsPrincipal
{
public JObject Data { get; set; }
}
我想用它。当用户登录时,我尝试设置
var fbP = new FacebookPrincipal { Data = user.Data };
Thread.CurrentPrincipal = fbP;
AuthenticationManager.User = fbP;
HttpContext.User = fbP;
它在我设置后立即起作用,但是当我去ho时home/index
价值丢失了
var user = HttpContext.GetOwinContext().Authentication.User;
var bbbb = this.User;
var cccc = ClaimsPrincipal.Current;
上述所有方法都返回一个类型为Principal的PrincipalClaimsPrincipal
并投射到FacebookPrincipal
返回空值。
如何设置自定义主体?
ASP.NET Identity 使用默认值ClaimsIdentityFactory
在分配之前创建ClaimsIdentity
到用户和线程。你应该创建自己的ClaimsIdentityFactory
您可以在其中添加或管理附加信息。
UserManager<IdentityUser> userManager
= new UserManager<IdentityUser>(new UserStore<IdentityUser>());
userManager.ClaimsIdentityFactory
= new MyClaimsIdentityFactory<IdentityUser>();
以及以下代码来创建 ClaimsIdentity 或其子类的实现。
public class MyClaimsIdentityFactory<IUser> : ClaimsIdentityFactory<IUser> where IUser : IdentityUser
{
public MyClaimsIdentityFactory(): base()
{
}
public override System.Threading.Tasks.Task<System.Security.Claims.ClaimsIdentity> CreateAsync(UserManager<IUser> manager, IUser user, string authenticationType)
{
// Override Creation of ClaimsIdentity and return it.
}
}
- 确保您绝对需要子类化 ClaimsIdentity。您可以添加附加信息作为声明。
- 你应该使用
base.CreateAsync
并合并Claims
到你创建的ClaimsIdentity
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)