繁体   English   中英

在自定义控件中使用ASP.NET成员资格提供程序的字符串资源

[英]Using the string resources of ASP.NET membership provider in a custom control

我有要求为ASP.NET成员资格构建自定义控件。 控件是一种CreateUserWizard,但有些特殊。 用户是由我们的客户经理创建的。 用户首次登录时,输入他们的用户名和初始密码,更改密码并在一次交易中输入其他信息(电子邮件)!

通过自定义CreateUserWizard或其他内置控件来构建它似乎是错误的方法。 我想通过使用内置控件的字符串资源来构建自定义控件。 有没有一种方法可以仅访问ASP.NET成员资格的资源? 他们是公共可访问资源管理器还是类似的工具?

MembershipProvider模型公开了可通过web.config配置的所有属性 (更新的链接),因此一旦掌握了正确提供程序的实例,您就应该能够读取这些属性-无法读取的内容?

另外,大多数默认控件都允许您使用模板元素或通过向创建用户向导添加其他步骤 (例如,填充配置文件信息)来添加或替换控件-您是否能够提供有关自己所身身份的任何其他信息想做什么?

回应评论/问题更新

我对此有一些进一步的思考,一些您需要涵盖的思想,以及一些潜在的实现。

一旦客户经理创建了用户,并告知了用户名和临时密码,他们将如何(电话/电子邮件/其他方式)登录何处? 您是主站点登录控件,还是愿意将它们定向到自定义登录页面?

仔细考虑一下,并根据您在网站上拥有的登录控件的数量(即,您是否只有一个用户可以登录的地方,或者您可以访问多个页面),您可能希望实现以下某些或全部功能:

  1. 从SqlMembershipProvider继承的自定义成员资格提供程序 (不是MembershipProvider,它是抽象的,因此需要更多工作),并且仅真正覆盖ValidateUserChangePassword ,将所有其他方法传递回基本默认值。
  2. 一个自定义控件,用于捕获现有详细信息,电子邮件地址和新密码详细信息。
  3. 一个事件处理程序,用于捕获主登录控件的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类型的输出参数,该参数具有诸如SuccessInvalidUserNameInvalidPasswordDuplicateUserName ,这应有助于将明智的消息返回给客户主管。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM