AbpSession 扩展

  • Post author:
  • Post category:其他


1、在*.Core 下找到Extensions文件夹添加AbpSessionExtension.cs类和IAbpSessionExtension.cs类

2、IAbpSessionExtension继承IAbpSession

using Abp.Runtime.Session;
using System;
using System.Collections.Generic;
using System.Text;

namespace MyProject.Extensions
{
    public interface IAbpSessionExtension : IAbpSession
    {
        
        public string GetUsercId { get; }
        public string GetPermitNo { get; }
        public string GetUserdeptId { get; }
        public string GetWxOpenId { get; }

    }
}

3、AbpSessionExtension继承ClaimsAbpSession和IAbpSessionExtension


using Abp.Configuration.Startup;
using Abp.MultiTenancy;
using Abp.Runtime;
using Abp.Runtime.Session;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;

namespace MyProject.Extensions
{
    /// <summary>
    /// 对AbpSession的扩展
    /// </summary>
    public class AbpSessionExtension : ClaimsAbpSession, IAbpSessionExtension
    {
        public AbpSessionExtension(IPrincipalAccessor principalAccessor,
            IMultiTenancyConfig multiTenancy,
            ITenantResolver tenantResolver,
            IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider) :
            base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider)
        {
        }
        
       
        private string GetClaimValue(string claimType)
        {
            var claimsPrincipal = this.PrincipalAccessor.Principal;

            var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == claimType);
            if (string.IsNullOrEmpty(claim?.Value))
                return null;

            return claim.Value;
        }
        public string GetUsercId => GetClaimValue("UsercId");
        public string GetPermitNo => GetClaimValue("PermitNo");
        public string GetUserdeptId => GetClaimValue("UserdeptId");
        public string GetWxOpenId => GetClaimValue("WxOpenId");
    }
}

4、添加Session


loginResult.Identity.AddClaim(new Claim(“UserdeptId”, loginResult.User.deptId.ToString()));

loginResult.Identity.AddClaim(new Claim(“UsercId”, loginResult.User.cId.ToString()));

 public async Task<AuthenticateResultModel> Authenticate([FromBody] AuthenticateModel model)
        {
            var loginResult = await GetLoginResultAsync(
                model.UserNameOrEmailAddress,
                model.Password,
                GetTenancyNameOrNull()
            );
            //AbpSession.UsercId = loginResult.User.cId;
            //AbpSession.UserdeptId = loginResult.User.deptId;
            loginResult.Identity.AddClaim(new Claim("UserdeptId", loginResult.User.deptId.ToString()));
            loginResult.Identity.AddClaim(new Claim("UsercId", loginResult.User.cId.ToString()));

            if (AbpSession.WxOpenId != "")
            {
                var user = await _userManager.GetUserByIdAsync(loginResult.User.Id);
                user.wxopenid = AbpSession.WxOpenId;
                await _userManager.UpdateAsync(user);
            }
            var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));
            return new AuthenticateResultModel
            {
                AccessToken = accessToken,
                EncryptedAccessToken = GetEncryptedAccessToken(accessToken),
                ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds,
                UserId = loginResult.User.Id
            };
        }

5、调用扩展的Session


AbpSession.UserdeptId



版权声明:本文为douyapeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。