我将用户数据存储在名为 Users 的 MSSQL 表中。我想要的是访问实际登录用户的所有用户数据(电子邮件、地址、电话、如果用户是订阅者等)。

我不想使用配置文件,所以我决定使用自定义 MembershipProvider (或者你知道一些更好、更轻松的方法吗?)。

我不明白的是MembershipUser 和Membership。如果我从 MembershipProvider 继承,则在重写方法中我控制对数据库的访问数据。

但是如何使用从 MembershipProvider 继承的类呢?如果我想通过使用会员资格来验证用户身份,我应该这样做:

if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

但是继承自MembershipProvider的类在哪里呢?何时使用从 MembershipUser 继承的类?Membership 和 MembershipProvider 之间有什么关系?

有帮助吗?

解决方案

虽然还不是很清楚 在 MSDN 上, ,事情并没有那么复杂。有三类:

  • 会员资格:提供实用方法和入口点——基本上是一个单例(静态类)。
  • 会员提供者:充当 MembershipUser 对象的数据访问器和工厂。
  • 会员用户:代表个人用户。

根据应用程序的配置选择自定义 MembershipProvider(通过 Membership 中的代码):配置/system.web/membership。这是您让您的提供商发挥作用的地方。您的 MembershipProvider 实现必须编写为访问您喜欢为用户提供的任何数据存储:在本例中是您的用户表。

MembershipUser 对象仅通过您的 MembershipProvider 创建。MembershipProvider.ValidateUser() 方法应根据您的数据存储检查用户/密码组合是否有效。MembershipProvider.GetUser() 检索用户信息 - 在访问受保护的页面中使用它并传入 System.Web.HttpContext.Current.User.Identity.Name 作为当前经过身份验证的用户。

这就是说,我希望你确定你不想 使用配置文件, ,并且确实想要一个单独的用户表。如果您正在编写内部应用程序,请使用现有的 活动目录 或者 LDAP- 启用数据存储将降低管理成本并可能降低安全风险。当采用 MembershipProvider 路线时,您很容易犯上数百个错误。你用吗 加盐哈希?如何保护 User 表不被操纵?MSDN 只涵盖了一小部分 安全问题 你可能会面临。

其他提示

使用的特定提供程序在web.config上受到控制。您实际上可以设置多个提供程序,并具有默认提供程序。检查: http://msdn.microsoft.com/en-us/library/ 6e9y4s5t.aspx

当这样调用时,成员资格只使用默认提供程序。如果您想为用户提供额外信息,您将继承MembershipUser,但这会将其余代码与您的特定提供商联系起来。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top