首页 文章

ASP NET Boilerplate,登录保存在ABPSession中

提问于
浏览
0

我是asp网络样板框架的新手,我创建了一个新的mvc项目多页面Web应用程序,没有模块零 .

我想使用AbpSession类,根据我所理解的内容,通过Thread.CurrentPrincipal获取用户ID .

但是,我不明白登录后如何做,以保存Thread.CurrentPrincipal中的用户ID .

我在网络中搜索并找到了几个解决方案,但在AbpSession类中,用户ID始终为null .

我找到的最佳解决方案是:

IList<Claim> claimCollection = new List<Claim>
{
      new Claim(AbpClaimTypes.UserId, "5")
};
ClaimsIdentity claimsIdentity = new ClaimsIdentity(claimCollection);
var principal = new ClaimsPrincipal(claimsIdentity);
Thread.CurrentPrincipal = principal;

这是我第一次使用主体和身份,尽管有文件证明我不太明白如何使用它们与asp net样板,我没有找到样本代码 .

你知道如何告诉我正确的方法或告诉我在哪里可以找到一些功能代码吗?

谢谢

1 回答

  • 0

    尽管问题非常笼统,但我想与大家分享一些关于如何在ASP.NET Core中向AbpSession添加自定义字段的代码 .

    MyAppSession.cs

    //Define your own session and add your custom field to it
    //Then, you can inject MyAppSession and use it's new property in your project.
    public class MyAppSession : ClaimsAbpSession, ITransientDependency
    {
        public MyAppSession(
            IPrincipalAccessor principalAccessor,
            IMultiTenancyConfig multiTenancy,
            ITenantResolver tenantResolver,
            IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider) : 
            base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider)
        {
    
        }
    
        public string UserEmail
        {
            get
            {
                var userEmailClaim = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == "Application_UserEmail");
                if (string.IsNullOrEmpty(userEmailClaim?.Value))
                {
                    return null;
                }
    
                return userEmailClaim.Value;
            }
        }
    }
    

    UserClaimsPrincipalFactory.cs

    //Override CreateAsync method to add your custom claim
    public override async Task<ClaimsPrincipal> CreateAsync(User user)
    {
        var claim = await base.CreateAsync(user);
        claim.Identities.First().AddClaim(new Claim("Application_UserEmail", user.EmailAddress));
        return claim;
    }
    

相关问题