- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有什么阻碍我只自定义整个成员资格、角色和个人资料,而不继承抽象类(如 MembershipProvider 等)?
MSDN明确指出:“在实现自定义角色提供者时,需要继承RoleProvider抽象类。” ( http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.aspx )
然而,当我继续进行下去时,我发现我实际上是在根据我们的特定需求定制整个东西,而且在很多情况下,我什至没有实现继承的东西,而是我自己的方式。我正在做的事情之一就是“GetAllRoles”方法。 .NET 要我实现一个返回字符串数组的方法。我发现这不符合我的需求,因为在我们的案例中,“角色”包含的信息远不止名称——例如,我们有多种语言的角色描述。所以我创建了自己的名为 ProjectRole 的自定义类,并让我的 GetAllRoles 方法返回一个 List<ProjectRole>
。 .然后在表示层上,我可以使用一个简单的 foreach 循环从每个 ProjectRole 中提取所有数据。
同样,我不想为用户返回 MembershipUser,而是返回 ProjectUser,我可以在其中提供自己的字段。
到目前为止,一切正常。但我还没有完成。我想知道的是,我是否以某种方式搞砸了自己,只是还没有意识到呢?对于登录,我正在做
if (ProjectMembershipProvider.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text == true)
{
FormsAuthentication.SetAuthCookie(UsernameTextBox.Text, true);
}
如果我没记错的话,此时我什至没有以任何方式使用 ASP.NET 提供程序,除了继承一堆我最终抛出的东西 [Obsolete]
标记是因为我分拆了自己的方法。然而,让我担心的是,最后,我仍然希望能够使用某些东西,比如 User.Identity.IsAuthenticated
。和 User.Identity.Name
这样就可以在里面显示用户名,比如 "Welcome " + User.Identity.Name
.如果我沿着这条路走下去,这是否可能?
tl;dr --- 我是不是因为没有正确使用我继承自的提供程序而不知何故搞砸了自己,只是还没有意识到这一点?
最佳答案
尽管 Tim 在具体实现方面有误,但他的论点是正确的。如果您希望使用 Membership API,您必须继承抽象类,因为 API 依赖于那些抽象类。 API 没有其他方法可以知道要使用的接口(interface)。
但这并不意味着您必须使用 Membership API。但是,正如 Tim 提到的,您失去了成员(member)资格的一大好处,即您可以插入一个通用提供程序,而这完全独立于您的应用程序。
RoleProvider
具有返回字符串的特定接口(interface)的原因是这些字符串可以与角色的标准声明(即 User.IsInRole()
等)进行比较..) 这个内置管道对你的扩展版本一无所知。如果您不实现标准版本,当您尝试使用固有功能时它会抛出异常。
有解决办法。成员资格、角色等只是其他系统的实现,尤其是 IPrincipal
和 IIdentity
。如果您实现自己的这些接口(interface)版本,您可以完全绕过角色、成员资格等。然后使用 User.IsInRole()
将调用您的 IPrincipal
实现,而 User.Identity.Name
将从您的自定义 IIdentity 返回数据
实现。然后,您放弃了对官方成员(member)资格和角色 api 的支持(没有较低级别的个人资料界面,个人资料只是成员(member)资格 api 的一部分)
为什么要关心这些?因为框架,整个安全基础设施都是围绕它们构建的。如果您只是尝试使用 session 变量来确保您自己的安全,您将拥有一个不安全且容易损坏的系统。
关于c# - 不继承 MembershipProvider、RoleProvider 等的自定义成员资格/角色/个人资料提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204919/
场景: 构建供公司输入信息的应用程序。 我需要扩展 asp.net 中的内置成员资格提供程序。我的独特情况是我已经拥有每家公司的人口统计信息,但没有网络应用程序的用户 ID 和密码。我想用人口统计信息
我正在尝试使用带有 ASP MVC 的自定义 MembershipProvider 来保护我的应用程序中的 Controller 。 只是为了了解一些背景知识,我最终将使用网络服务来验证每个用户。 据
我想验证用于在 asp.net (.net 3.5) 中创建/更新用户的密码字段。密码将用于 MembershipProvider。 实现此目的的最佳方法是什么,以便验证将使用成员资格提供商的配置设置
我正在使用 SqlMemberShipProvider 并且它运行良好,但我希望 MembershipUser 具有一些其他属性,例如名字、姓氏、电话号码等。解决此问题的最佳方法是什么?我是否必须创建
我正在尝试在我的站点中实现 Asp.net 表单例份验证。通常,您在 web.config 中提供数据库连接字符串的名称。然而,由于我们的数据库设置有点复杂,我正在寻找一种方法来手动向 Members
我知道 MembershipProvider 位于 System.Web.Security 命名空间中。我在我的项目中添加了一个引用 System.Web,我在我的 .cs 文件中添加了一个 usin
我正在尝试在 asp.net 中编写自己的自定义 MembershipProvider,我想推出自己的登录页面。我们在登录时做了一些相当特殊的事情,所以我们不能使用默认的登录控件,所以我需要一种方法来
当覆盖 MembershipProvider 并直接调用它时,有没有办法在不手动查看配置文件的情况下填充 Initialize 方法的 NameValueCollection 配置参数? 很明显,这个
我对 .Net 中的 MembershipProvider 有一些问题,我一直无法找到明确的答案。 使用什么类型的加密,AES? 方法 EncryptPassword,它可以处理任何盐,还是我在传递它
我在我的 Web.Config 文件中注册了一个自定义 MembershipProvider 类。我正在使用 CaSTLe Windsor 使用控制反转,并且我已将自定义 MembershipProv
我正在构建一个自定义成员资格提供程序,我想知道我的自定义成员资格提供程序何时初始化? 实际上我正在使用 Entity Framework ,所以我需要了解是在每个方法中初始化 DbContext 还是
我正在尝试使用 CustomMembershipProvider 编写一些创建/删除/更改用户的测试。 CustomMembershipProvider 是 WebApp 程序集的一部分。 当我运行测
我的 web.config 和登录控件中有多个成员(member)提供程序, 我将根据带有提供商名称的下拉列表来使用提供商。 Web.config:
如何创建在 ASP.NET/MVC 网站中使用的 MembershipProvider? 它不会在您的数据库中生成您需要的表吗? 最佳答案 ASP.NET/MVC 的默认模板已在您的 web.conf
是否可以在不使用 MembershipUser 类的情况下创建自定义 MembershipProvider? 我想使用我自己的 User 类并保持整洁,我不想使用 MembershipUser 类,它
我正在努力拆分我目前拥有的现有工作应用程序,以便更好地理解 n 层结构。此应用程序使用自定义成员身份和角色提供程序,并带有表单例份验证。 当前,所有数据访问和业务逻辑都在同一个 ASP.Net 解决方
我尝试在我自己的数据库中使用自定义 MemberShipUser 实现自定义 MembershipPriver(具有特定的用户表模型): 这是完全不同的文件: iTwitterMembershipPr
ASP.NET 中的 MembershipProvider 类使用什么在 HTTP 级别对用户进行身份验证?是 Cookie 还是 Session? 最佳答案 简答: Cookies。 长答案: 都没
我最近开始研究 ASP.NET MVC,但这个问题也适用于经典的 ASP.NET。就其值(value)而言,我对表单例份验证和成员身份提供程序也不是很了解。 我正在尝试编写我自己的 Membershi
我已经使用自定义数据存储实现了我自己的自定义 MembershipProvider。到目前为止没有问题。我希望人们使用他们的电子邮件而不是用户名登录。因为我有自己的数据存储,所以这不是主要问题,我可以
我是一名优秀的程序员,十分优秀!