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。