使用自定义成员资格和角色提供程序在 MVC 中实现 IPrincipal 和 IIdentity

2023-11-30

我一直坚持自定义 iprincpal 和 iidentity 对象的实现。我现在花了一天的时间来搜索如何实施这些权利并用更多信息来扩展它。

我想扩展信息@Context.User.Identity.Name使用全名或其他名称等自定义变量。

EDIT:现在我得到了以下代码,但是如果我尝试阅读@((CustomPrincipal)Context.User.Identity).Nachname我收到一个错误System.Web.Security.FormsIdentity无法投射到CustomPrincipal.

有任何想法吗?

public class CustomPrincipal : GenericPrincipal
{
    public CustomPrincipal(IIdentity identity, String[] roles) : base(identity, roles){ 

    }
    public String Vorname { get; set; }
    public String Nachname { get; set; } 
}

账户型号:

public class FormsAuthenticationService : IFormsAuthenticationService
{
    public void SignIn(string userName, bool createPersistentCookie)
    {
        if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Der Wert darf nicht NULL oder leer sein.", "userName");
        // Grab user information to insert
        KIMembershipUser membershipUser = (KIMembershipUser)Membership.GetUser(userName);
        var customInfo = String.Format("{0}|{1}", membershipUser.Vorname, membershipUser.Nachname);
        // Create and encrypt the ticket
        var ticket = new FormsAuthenticationTicket(
            2, // Version number
            userName, // Username
            DateTime.Now, // Issue date
            DateTime.Now.AddMinutes(30), // Expiration date
            createPersistentCookie, // Is it persistent?
            customInfo // User data
        );
        var encTicket = FormsAuthentication.Encrypt(ticket);
        // Store the ticket into a cookie
        var cookie = FormsAuthentication.GetAuthCookie(FormsAuthentication.FormsCookieName,createPersistentCookie);
        cookie.Value = encTicket;
        // Append the cookie to the response
        HttpContext.Current.Response.Cookies.Add(cookie); 

        //FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }

    public void SignOut()
    {
        FormsAuthentication.SignOut();
    }
}

全局.asax:

    protected void Application_PostAuthenticateRequest(){
        // Collect current security information
        var principal = HttpContext.Current.User as RolePrincipal;
        if (principal == null)
            return;
        var identity = principal.Identity as FormsIdentity;
        if (identity == null)
            return;
        var roles = principal.GetRoles();
        // Extract user data in the authentication ticket
        var customInfo = identity.Ticket.UserData;
        var tokens = customInfo.Split('|');
        // Build a richer principal object
        var CustomPrincipal = new CustomPrincipal(identity, roles){
            Vorname = tokens[0],
            Nachname = tokens[1]
        };
        // Store the new principal in the HttpContext
        HttpContext.Current.User = CustomPrincipal;
    }

Use (CustomPrincipal)Context.User).Nachname代替(CustomPrincipal)Context.User.Identity).Nachname

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义成员资格和角色提供程序在 MVC 中实现 IPrincipal 和 IIdentity 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Lambdify 参数积分

    我有以下问题 我想要lambdify a sympy包含参数积分的表达式 例如Integral tanh a x x 0 1 我尝试进行手动实施像这儿 我们想要的本质上是将积分转换为如下形式 lambda theta quad lambda
  • 用于调整/校准启发式算法属性的软件

    今天看到有一个软件叫WinCalibra 向下滚动一点 它可以将具有属性的文本文件作为输入 然后 该程序可以根据算法的输出值优化输入属性 看这张纸或用户文档以获取更多信息 请参阅上面的链接 遗憾的是 doc 是一个压缩的 exe 您知道在
  • 使用 java 流将两个相同大小(和不同类型)的列表组合成域对象列表

    我有两个相同大小的列表ids and results我想用域对象创建新列表 List
  • IE9 + css:固定标头表的问题

    所以 我认为这是一个 CSS 问题 但基本上 我提供的 HTML 在反应式布局中包含一个固定的标头表 Code http jsfiddle net JpRQh 10 有3行数据 但在IE9中 表格行数似乎疯狂高 并且滚动条已被禁用 我在固定
  • 为什么 SQL 中没有“product()”聚合函数? [复制]

    这个问题在这里已经有答案了 当有 Sum min max avg count 函数时 有人可以帮助理解为什么没有 Product 内置函数 这个聚合函数最有效的用户实现是什么 谢谢 三位一体 如果您有可用的指数函数和对数函数 则 PRODU
  • 是否有一个函数可以检查字符串中的字符是否是字母表中的字母? (迅速)

    我正在将 python 程序转换为 swift 其中一个部分使用 for 循环来保留字符串中的每个字符 如果它是字母 在python中 就像使用 isalpha 一样简单 swift中有什么可以做到这一点吗 python 中的代码 word
  • PHP、PDO、MySQL,注意:尝试获取非对象的属性

    我仍在尝试围绕 php 进行思考 如果这是一个简单的错误 那么很抱歉 我已经搜索了很长一段时间 只能设法得到不同的错误 例如 未定义的索引 我试图做的是有一个函数可以从表中获取数据 目前它不包含很多数据 但最终将包含每个主网页的所有内容 它
  • NSParagraphStyle iOS - 如何检测块和列表?

    我有一个 NSParagraphStyle 对象 当使用 NSLog 检查时 它包含列表和块 但是似乎完全没有办法访问它们 我使用 OS X 创建文档并将其传输到 iOS 的文本视图中 其中列表和表格可以成功重新创建并显示在 NSLog 中
  • JavaScript 正则表达式原型

    为什么 Chrome 的控制台显示 对于 RegExp 的原型 console log RegExp prototype console log a proto 这是特定于实现的吗 IE 正在显示 这只是出于好奇而提出的问题 当我遇到这个问
  • 如何让 IBM DB2 提供程序与 Entity Framework 4.0 一起使用

    有人可以告诉我如何让 DB2 提供程序显示在 更改数据源 对话框窗口中吗 Steps 右键单击 edmx 设计图面 选择 从数据库更新模型 在更新向导中 单击 新连接 在 数据源 文本框旁边 单击 更改 在 更改数据源 窗口中 我仅在列表中
  • 没有主键可供引用的外键

    我有以下两张表 CREATE TABLE parent c1 INTEGER CREATE TABLE child c1 INTEGER c2 INTEGER c3 INTEGER CONSTRAINT fk c3 FOREIGN KEY
  • 读取VC++ CArchive二进制格式(或Java读取(CObArray))

    是否有关于用于序列化各种 MFC 数据结构的二进制格式的明确文档 我已经能够在十六进制编辑器中查看我自己的一些类 并使用 Java 的 ByteBuffer 类来读取它们 通过自动字节顺序转换等 然而 我目前在尝试引入 CObArray 数
  • OpenGL 离屏渲染

    我有一个应用程序 可以创建 3D 模型并从中导出图像 我用这个例子来做到这一点 include
  • 在 Glance Widget 中复制 Canvas 的最佳方式?

    在 Compose 中我们有方法Canvas 画线等 Glance中有类似的功能吗 如果没有 复制 Canvas 功能的最佳方法是什么 None
  • 为什么 sphinx 在同一行上格式化我的文档字符串参数

    我对 sphinx 比较陌生 想为我的项目生成文档 我的函数之一的示例可以在 Predict py 中找到 def arima rolling forecast training set testing set order solver l
  • 加载程序集和版本控制

    我正在考虑通过提供一些预定义的接口来向现有应用程序添加一些可扩展性 这些接口可以通过放置在特定位置并由应用程序拾取的 插件 来实现 应用程序的核心很少更新 而插件更新和部署则更加频繁 基本上 有这样的设置 in core assembly
  • 带有线性渐变的CSS过渡[重复]

    这个问题在这里已经有答案了 我正在尝试向一个按钮添加一个过渡 该按钮的背景是用 css 线性渐变制作的 但它不起作用 这是我的按钮的 CSS a button background webkit gradient linear left t
  • doctrine2 和 group_concat

    我一直在浏览文档 谷歌 但没有找到任何解决方案 有没有办法在没有本机mysql的情况下使用doctrine2 DQL 执行或模仿GROUP CONCAT eg SELECT u id u name GROUP CONCAT AS user
  • 错误:您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展

    我是 WordPress 新手 上传网站后我遇到了这个错误 该网站运行良好一段时间 然后就发生了这种情况 输入 URL 后 此文本将显示 您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展 转到 php ini 但找不
  • 使用自定义成员资格和角色提供程序在 MVC 中实现 IPrincipal 和 IIdentity

    我一直坚持自定义 iprincpal 和 iidentity 对象的实现 我现在花了一天的时间来搜索如何实施这些权利并用更多信息来扩展它 我想扩展信息 Context User Identity Name使用全名或其他名称等自定义变量 ED