MembershipProvider 模型exposes all the properties(更新链接)可通过 web.config 进行配置,因此一旦您掌握了正确提供者的实例,您应该能够读取这些属性 - 您不能阅读?
此外,大多数默认控件允许您使用Template elements 或通过adding additional steps to the create user wizard 添加或替换控件(例如填充配置文件信息) - 您能否提供有关您正在尝试的内容的任何其他信息怎么办?
回复评论/问题更新
我对此有一些进一步的想法,一些关于你需要涵盖的想法,还有一些关于潜在实施的想法。
一旦客户主管创建了用户,并以某种方式(电话/电子邮件/其他方式)告知他们用户名和临时密码,他们应该去哪里登录?您是主站点登录控件,还是乐于将它们引导到自定义登录页面?
深思熟虑后,根据您在网站上拥有的登录控件的数量(即您是只有一个用户可以登录的地方,还是有多个页面),您可能希望实现部分或全部以下:
- 从 SqlMembershipProvider 继承的 custom membership provider(不是 MembershipProvider,它是抽象的,因此需要更多工作),并且仅真正覆盖
ValidateUser 和 ChangePassword,将所有其他方法传递回基本默认值。李>
- 用于捕获现有详细信息、电子邮件地址和新密码详细信息的自定义控件。
- 用于捕获主登录控件的
Authenticate 事件的事件处理程序。
您可能想要使用自定义成员资格提供程序的原因是,它使您能够利用基本提供程序的 Approved 用户概念之类的东西 - 开箱即用 SqlMebershipProvider 的问题在于如果用户未获得批准,它将在尝试验证用户时返回 false,这使得在您的自定义控件中很难区分错误密码和“未批准”用户。
如果您创建自定义控件并拥有上面讨论的自定义成员资格提供程序,则可以将新用户引导到托管该控件的页面,这将确保他们在提交页面时提供所有其他详细信息以下:
- 致电
ValidateUser(在您的自定义会员提供商处)提供客户主管创建的详细信息。
- 如果返回 true,则使用用户、旧密码和新密码调用
ChangePassword。
- 致电您的提供商的
GetUser 以获取MembershipUser,将他们的电子邮件地址和“IsApproved”状态更新为true,并将MembershipUser 对象传递给UpdateUser 方法。
- 调用
FormsAuthentication.SetAuthCookie为用户设置cookie,以告知后续请求用户已通过身份验证。
- 将用户重定向到合理的页面。
如果前两个中的任何一个返回 false,您就可以返回一条合理的消息 - 如果 ValidateUser 失败,则之前提供的详细信息有误,如果 ChangePassword 失败,则新密码不符合长度、强度等的提供者配置。
您可能还想挂接到主登录表单的 Authenticate 事件,因为您需要手动检查用户是否已获得批准,如果没有则取消登录事件。解决此问题的一种方法(特别是如果您正在扩展 SqlMembershipProvider)是配置开箱即用的 SqlMembershipProvider 和您的自定义提供程序,将 SqlMembershipProvider 设置为默认值,然后在您的自定义控件中,而不是调用:
// Gets the "Default" provider configured in the web.config
MembershipProvider provider = Membership.Provider;
你会打电话给:
// Pass the name of your provider into the Providers collection
// Rather than hardcoding this, pass it in as a required parameter
MembershipProvider provider = Membership.Providers["MyMembershipProvider"];
您可以使用相同的方法来获取已配置的提供者的各种属性,例如强度、长度等。
请记住,CreateUser 方法有一个MembershipCreateStatus 类型的输出参数,它的值例如Success、InvalidUserName、InvalidPassword、DuplicateUserName,应该有助于返回合理的消息回到客户经理那里。