使用自定义成员资格和角色提供程序在 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 的相关文章

随机推荐

  • 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