扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年10月2日
关键字:
在本页阅读全文(共2页)
自定义 CreateUserWizard 控件
ASP.NET 2.0 不仅通过内置提供程序来支持其身份验证功能,而且还内置了 Web 控件,用于处理身份验证和授权。这些控件包括 Login、LoginView、PasswordRecovery、LoginStatus、LoginName、CreateUserWizard 和 ChangePassword。CreateUserWizard 控件允许用户在 ASP.NET 应用程序中创建帐户。与提供程序非常类似,这些控件基本上也不需要编写什么代码。要使用 CreateUserWizard 控件或上述任何一个控件,您只需将其从工具箱拖动到任何 ASP.NET 页面或用户控件上即可。
CreateUserWizard 是一种向导控件,要添加该控件只需两个步骤。第一步是“注册新帐户”,要求用户提供有关用户名、密码、电子邮件地址以及安全问题和答案的信息。在某些情况下,web.config 中定义的 Membership 提供程序可能在 requiresQuestionAndAnswer 属性设置为“false”时进行配置。这种情况下,安全问题和安全答案字段将在运行期间隐藏。第二步为“完成”,要求用户确认已创建帐户,并显示一个“完成”按钮。用户单击按钮后将被重定向到 ContinueDestinationPageURL 属性所指定的 URL,或运行一个为按钮的单击事件准备的事件处理程序(如果提供的话)。通常,开发人员会使用 ContinueDestinationPageURL 属性将用户重定向到主页或引用页面。有关 CreateUserWizard 控件的详细信息,请参阅 msdn.microsoft.com/msdnmag/issues/05/10/ExtremeASPNET 和 msdn.microsoft.com/msdnmag/issues/04/11/CuttingEdge。
创建一个注册过程
创建一个自定义用户注册过程有下列几种方法。第一,您可以使用内置的 CreateUserWizard 控件,在“注册新帐户”步骤之前对其进行修改,添加其他操作。第二,您可以将每个步骤转换为导航模板,并根据需要对每个控件步骤进行自定义。这样就可以将用户信息和配置文件信息移动到不同的步骤中,或将所有字段保留在同一步骤内。最后一种方法,您可以使用 Membership API 的 CreateUser 方法创建自己的注册控件。您需要根据应用程序的具体设计和希望添加的自定义级别来选择不同的解决方案。在本示例中,您可以在“注册新帐户”步骤之前新添一个步骤,这样就可以以最少的代码添加自己的配置文件窗体。
新建的步骤会要求用户提交前面提到的每个配置属性的值,但 ProfileVersion 属性除外。要注意的是,UserID 和 LastUpdatedDate 的值由提供程序填充,所以不需要用户提供。当从应用程序设置或 web.config 的其他分区检索值来提交窗体时,将对 ProfileVersion 属性进行填充。有关创建属于自己的配置分区的详细信息,请访问 msdn.microsoft.com/msdnmag/issues/06/06/ConfigureThis。
图 4 显示了属性正在被添加到 Microsoft 事先提供的 SqlTableProfileProvider 中。我们可以使用 Profile sectionGroup 来指定配置文件版本的值。Profile 将在用户帐户创建完毕后立即更新。被定义为 ProfileCommon 的对象将加载用户当前的配置文件属性和值。由于配置文件和用户帐户对于系统来说都是陌生的,因此所有的值均为空。所有的配置文件属性将更新至包含非空值的状态。最后保存 ProfileCommon,从而可使用提供程序将数据写回到数据库。如果不保存 ProfileCommon,ASP.NET 将不知道需要写入数据。
检查配置文件版本
使用 ASP.NET 的一大好处在于它是模块化的。从 ASP.NET 1.0 开始,开发人员就可以为 ASP.NET 创建 HTTP 处理程序或模块。您可以编写 HTTPModule 来检查是否存在某个用户的配置文件以及该配置文件的版本是否正确。如果一个配置文件不存在或其版本错误,您可以强制用户访问集中的配置文件更新页面。
要确定一个用户当前注册的配置文件版本是否正确,您需要使用应用程序的 AuthorizeRequest 方法。在执行此操作时,您自定义的方法会在用户通过身份验证但尚未获得页面的访问权时运行。(见图 5)。由于您无法提取未登录用户的配置文件,因此就需要从检查对象中排除这些请求。您还可以排除那些当前位于 editprofile.aspx 页面上的用户,以防止他们陷入连续重定向的循环中。随后,您将获得第二个注册的配置文件提供程序(即 SqlTableProfileProvider)上 profileVersion 属性的值。您不愿请求提供程序集合中的第一个提供程序,因为除非您显式地将其从提供程序集合中删除,否则该程序将总是作为内置的配置文件提供程序。在提取了应用程序的当前配置文件版本后,要加载用户帐户的配置文件并检查配置文件中的配置文件版本。要执行此项操作,需新建一个 ProfileCommon 对象并根据用户的姓名加载其配置文件。如果用户的配置文件版本低于应用程序的配置文件版本,用户将重定向到 editprofile.aspx 页面。如果两个版本一致,则加载用户试图访问的页面。
在您可以构建应用程序之前,要先确保 web.config 文件已针对 Forms 身份验证进行了配置。如果您未对其进行配置,应用程序将认为您正在使用 machine.config 文件中定义的 Windows® 身份验证。web.config 文件还需要一个位置分区组来拒绝任何未经身份验证的用户访问编辑配置文件页面。同时您还必须添加一个登录控件,以便用户能够登录到站点。控件可以添加到主页上,也可以添加到某个单独的登录页面。将注册链接添加到登录控件是个不错的主意,这样您的用户就可以找到注册页面了。
逐步运行应用程序
让我们来做一个回顾,当用户访问站点并单击要求其创建用户帐户的链接时,会重定向到注册页面并被要求填写其配置文件信息。当用户单击“下一步”时,将被要求输入用户名和密码,随后重定向到默认页面。在每个页面加载期间,HTTPModule 会查看 web.config 文件中指定的配置文件版本是否高于用户的配置文件版本。如果高于用户的版本,则将用户重定向到编辑配置文件页面。否则,用户可以继续浏览页面。
要确保模块工作正常,需要向自定义配置文件表格中添加一列。该列必须设为可接受空值,否则当用户试图浏览某页面时,您将收到一条错误消息。这是因为尚未针对所有用户建立属性,而且属性也尚未添加到 web.config 文件中。添加属性并将配置文件从版本 1 更改为版本 2。当您保存 web.config 文件并登录到站点时,如果不首先更新配置文件,您可能无法浏览任何页面。
使用 web.config 文件存储配置文件版本的一个弊端是,如果您在修改配置文件版本时有用户正在访问网站,则应用程序会重新设置并强制用户退出登录。之后当他们再次尝试登录时,就会被重定向到编辑配置文件页面。考虑到这一点,您可能要创建一个简单的文本文件或 XML 文件来读取配置文件的版本号。
下一步该怎么做?
如果您需要一些入门的帮助和指导,可以下载我整理的 Visual Studio® Installer (VSI) 项目。该项目中包含了用 Visual Basic 和 ASP.NET 编写的全部源代码,并为您开始编写自己的应用程序提供了丰富的基础知识和内容。您可以从 MSDN® Magazine 网站下载这些内容。对于自定义 ASP.NET 2.0 配置文件提供程序,我也仅了解一些皮毛,相信通过自己的探索您会发现更多的精彩之处。这就是 .NET 的强大之处,让您感觉就像拥有了属于自己的个人工具箱。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者