4.会话属性 AbpSession

一、概述

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,771评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,894评论 6 13
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,301评论 22 257
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,751评论 0 15
  • 自由书写第10天 我父母之间是互相支持和照顾的关系,先生的父母之间更多是公公对婆婆的包容和因为婆婆身体的缘故无微不...
    夕彦阅读 2,656评论 0 1