Asp.net Boilerplate之AbpSession扩展
当前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";
}
}
这样就完成了,登录或下次自动登录之后,在代码里的智能提示里就可以看到扩展的属性:
而且值也保存在了里面:
Asp.net Boilerplate之AbpSession扩展的更多相关文章
- ASP.NET Boilerplate
I want it to be a start point for all we .NET developers, so, it will be good to develop it together ...
- 记AbpSession扩展实现过程
AbpSession只给了userId和TenantId,这次实际项目中并不够用,网上找了很久也没找到好的实现方法.项目初期没有时间进行研究,最近空了试了一下,大致实现添加额外字段并读取相应值的功能. ...
- 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)
本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...
- Asp.net Boilerplate源码中NotNullAttribute的用处
看Asp.net Boilerplate 1.1.3.0源码时发现有一个NotNullAttribute的定义和27处的引用,就是不知道它的作用,当然顾名思义是可以的,就是不知道它是怎么判断的,在哪里 ...
- ASP.NET Boilerplate终于发布v1.0了
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.N ...
- Asp.net 面向接口可扩展框架之使用“类型转化基础服务”测试四种Mapper(AutoMapper、EmitMapper、NLiteMapper及TinyMapper)
Asp.net 面向接口可扩展框架的“类型转化基础服务”是我认为除了“核心容器”之外最为重要的组成部分 但是前面博文一出,争议很多,为此我再写一篇类型转化基础服务和各种Mapper结合的例子,顺便对各 ...
- ASP.NET Boilerplate 深入系列之:概述
因为项目需要,最近个人购买了一直在研究的ABP框架的一个Regular Licience,马上要用到一个实际的项目中,为了能够准确把握该框架涉及到设计思想.使用模式.内在实现细节.准备在接下来的一个月 ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第一节--使用ASP.NET Boilerplate模板创建解决方案
"abp是ASP.NET Boilerplate简称,是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板" abp官方网站: ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
随机推荐
- SDWebImage源码解读之SDWebImageDownloaderOperation
第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...
- 隐私泄露杀手锏 —— Flash 权限反射
[简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- Bootstrap 模态框(Modal)插件
页面效果: html+js: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- Coroutine in Java - Quasar Fiber实现--转载
转自 https://segmentfault.com/a/1190000006079389?from=groupmessage&isappinstalled=0 简介 说到协程(Corout ...
- 动手做第一个Chrome插件
Chrome插件是令人惊讶的简单,一旦你弄懂它的工作和实现原理.它是由一部分HTML,一部分Js,然后混合了一个叫做manifest.json的Json文件组合而成的整体.这意味着你可以使用你最擅长的 ...
- UVA, 10336 Rank the Languages
难点在于:递归函数和输出: #include <iostream> #include <vector> #include <algorithm> #include ...
- Ubuntu搭建lnmp环境
1.安装nginx 安装 sudo apt-get install nginx 服务启动.停止.重启 /etc/init.d/nginx start /usr/sbin/nginx -c /etc/n ...
- 《Note --- Unreal --- MemPro (CONTINUE... ...)》
Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...