【发布时间】:2011-03-17 11:30:25
【问题描述】:
我想在经过身份验证的用户中存储额外的信息,以便我可以轻松访问它(例如 User.Identity.Id),而不仅仅是名称,因为我打算让那个非唯一的.
到目前为止,我已经收集到我应该寻求实现自定义主体和/或身份,但我不确定如何去做。我一直在寻找有关此事的文档和教程,但我在不同的地方找到了相关的东西,我发现它有点混乱。
我已经看到了如何在用户数据属性中将自定义信息添加到身份验证 cookie,但我希望在单元测试中获得依赖注入的好处,我可以通过主体和身份来获得。
如果我想实现自己的 Principal 或 Identity,我需要考虑哪些确切步骤?
在这种情况下我能做的最简单的事情是什么(只需添加 ID 并保留所有默认值)? “默认值”将包括默认提供者(成员资格、角色等)。
我已经看到了other question,但我希望答案不会在两者之间留下任何漏洞,例如示例中 AuthenticateRequest 事件中的角色魔术字符串。相反,我需要知道如何将默认 SqlRoleProvider 中的角色添加到当前用户:何时何地执行此操作,以及是否需要执行其他任何操作来将我的新类与其他默认提供程序连接起来。
如果能够转到示例 ASP.NET MVC 2 应用程序(例如,来自 Visual Studio 2010 模板),进行编辑并让它工作,那就太棒了。
编辑:我已经编辑了这个问题,以更好地表明我在这里迷路,所以我不能凑合答案水平太高。
P.S.:在我看来,在身份中使用 ID 而不是在主体中使用 ID 更有意义,尽管我之前在某种程度上说过。
【问题讨论】:
-
您目前是否已设置并运行表单身份验证和角色?
-
我愿意。我从 VS 2010 模板中的 MVC Web 应用程序(与 MVC Empty Web 应用程序相反)开始,因此它具有用于用户管理的所有默认 SQL 提供程序:包括成员资格和角色。但大部分都是在幕后完成的。按照惯例,因为它是
-
你不能只使用 Profile 支持来处理这种事情吗?这就是它的用途(与用户关联的额外数据) - 应该比我认为的“自定义用户”更简单
-
确实,但我想将它放在某种会话变量中,而不是每次都从存储中获取它。此外,除了身份验证 cookie UserInfo(这是我用作解决方法的方法)之外,我还想要一些可以与依赖注入一起进行测试的东西,比如 hanselman 所做的 hanselman.com/blog/…
标签: asp.net-mvc-2 forms-authentication identity principal