Asp.net Boilerplate之AbpSession扩展
2018-06-22 07:43:38来源:未知 阅读 ()
当前Abp版本1.4.2,项目类型为MVC5.
以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所有!
step1.添加IAbpSessionExtensions接口:
/// <summary> /// IAbpSession Extensions 登录时"记住我"保存Cookie,也就是说关闭后再打开不重新登录的话,取得到值. /// </summary> public interface IAbpSessionExtensions : IAbpSession { string UserName { get; } string EmailAddress { get; } string Name { get; } string FullName { get; } string Surname { get; } }
step2.添加实现类AbpSessionExtensions:
/// <summary> /// IAbpSession Extensions /// </summary> public class AbpSessionExtensions : ClaimsAbpSession, IAbpSessionExtensions {
/// 如果是之前的版本,此处的构造函数会有所不同,只要把这个构造函数删除,再根据Vs的提示生成默认实现就可以.
public AbpSessionExtensions(IPrincipalAccessor principalAccessor,
IMultiTenancyConfig multiTenancy, ITenantResolver tenantResolver,
IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider)
: base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider)
{
}
public string EmailAddress => GetKeyValue(ClaimTypes.Email); public string Surname => GetKeyValue(ClaimTypes.Surname); public string Name => GetKeyValue(ClaimTypes.Name); public string UserName => GetKeyValue(EnglishConsts.ClaimTypes.UserName); public string FullName => GetKeyValue(EnglishConsts.ClaimTypes.FullName); private string GetKeyValue(string key) { var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal; if (claimsPrincipal == null) { return null; } var claim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == key); if (string.IsNullOrEmpty(claim?.Value)) { return null; } return claim.Value; } }
step3.在Mvc控制器基类(项目名称ControllerBase)里添加AbpSession属性:
//IAbpSession Extensions public new IAbpSessionExtensions AbpSession { get; set; }
step4.在Account控制器的SignInAsync方法里成功登录后(AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = rememberMe }, identity),添加需要扩展的属性:
//IAbpSession Extensions identity.AddClaim(new Claim(ClaimTypes.Email, user.EmailAddress)); identity.AddClaim(new Claim(ClaimTypes.Name, user.Name)); identity.AddClaim(new Claim(ClaimTypes.Surname, user.Surname));
//这个常量自己去定义 identity.AddClaim(new Claim(EnglishConsts.ClaimTypes.UserName, user.UserName)); identity.AddClaim(new Claim(EnglishConsts.ClaimTypes.FullName, user.FullName));
step5.这里我定义了两个自定义常量,加在了项目名称Consts常量定义文件里:
public class EnglishConsts { public const string LocalizationSourceName = "English"; public class ClaimTypes { public const string UserName = "UserName"; public const string FullName = "FullName"; } }
这样就完成了,登录或下次自动登录之后,在代码里的智能提示里就可以看到扩展的属性:
而且值也保存在了里面:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash