一、ABP知识点篇

4.会话属性 AbpSession

2017-08-25  本文已影响40人  落地成佛

一、概述

AbpSession提供获取用户ID,租户ID,身份类型的一些信息。
AbpSession不是Session,服务器重启并不会导致丢失数据。

二、使用

2.1 Abp.Zero已经提供了登录实现,可以从官网拉取Abp.Zero的代码查阅。

基本思路是:根据用户名密码去核对用户信息,然后再根据用户信息去构造身份证(CliamsIdentity)并保存,Abp就可以根据身份证获取用户信息

2.2AbpSession扩展

2.2.1登录前添加Cliam(身份信息)

定位到AccountController,修改SignInAsync方法,在调用AuthenticationManager.SignIn之前添加下面代码:
identity.AddClaim(new Claim(ClaimTypes.Email, user.EmailAddress));

2.2.2定义IAbpSession扩展类获取扩展属性

namespace LearningMpaAbp.Extensions
{
    /// <summary>
    /// 通过扩展方法来对AbpSession进行扩展
    /// </summary>
    public static class AbpSessionExtension2
    {
        public static string GetUserEmail(this IAbpSession session)
        {
            return GetClaimValue(ClaimTypes.Email);
        }

        private static string GetClaimValue( string claimType)
        {
            var claimsPrincipal = DefaultPrincipalAccessor.Instance.Principal;

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

            return claim.Value;
        }
    }
}

作者:圣杰
链接:http://www.jianshu.com/p/930c10287e2a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

通过扩展类,我们不需要做其他额外的更改,即可通过ApplicationService, AbpController 和 AbpApiController 这3个基类已经注入的AbpSession属性调用GetUserEmail()来获取扩展的Email属性。

三、其他

3.1AbpSession 关键属性:

UserId: 当前用户的标识ID,如果没有当前用户则为null.如果需要授权访问则它不可能为空。
TenantId: 当前租户的标识ID,如果没有当前租户则为null。
MultiTenancySide: 可能是Host或Tenant。

上一篇 下一篇

猜你喜欢

热点阅读