自定义MembershipProvider来利用Asp.net 2.0 Login控件的登陆和修改密码模块

转向Asp.net 2.0,如果单单看Asp.net 2.0的例子和SDK,相信你一定对系统自带的Login控件有比较深刻的印象。Asp.Net 2.0的Login控件不用你写一行检测用户输入是否合法的程序代码及相关查询数据库的SQL脚本,只需把相应的控件拖到Web表单中,即可完成用户登陆,创建用户,用户角色管理,修改密码用户详细情况,取回密码等功能模块。
  Login控件看上去近乎完美,而我们现在手头正好来了一个项目要求采用Asp.net 2.0开发,而该项目也要求有登陆,用户管理,权限管理,修改密码等功能,相信绝大多数人都会考虑使用Login控件来快速搞定这些要求。于是乎,大家拿出以前的教学例子,试着分析较深一层的代码,看看该在哪里对Login控件修改一番,让它满足手头项目已设计好的数据库表结构。结果发现,除了aspx文件里面可以对Login控件的外观,提示文字可以自定义外,cs文件中愣是找不到一行代码,然后继续翻MSDN和Google,终于知道,要在自己的项目中直接使用系统自带的Login控件,需要做2项修改工作:
  1、根据你选用的数据库,修改Web.config中相应的connectionStrings。系统默认的数据库是SQL Server 2005 Express,如果我们的数据库是Access/SQL2000/2005/Oracle,当然要大改一番了。
  2、改完Web.config还不够,我们还得执行C:/WINNT/Microsoft.NET/Framework/v2.0.507/aspnet_sqlreg.exe注册你的sql server,该程序的作用是在你的数据库中建立Login控件需要的所有资源(大约有上十个表,三十多条存储过程,上十个视图等等),如果你使用的是access/orcale,或者是其他格式的数据库,那你自己去Google相应的SQL脚本吧。
  OK,想到Login控件帮你节省的工作量,相信不少人都会咬着牙完成上面的2项工作。完成上面2项工作后,大家接着读项目需求,发现有用户组管理和权限管理,幸好开发资料上提到Login控件集成的Role角色管理模块正好与之对应,不过以后我们创建一个用户后,还要再进入一个页面给用户选择所属用户组,当然,采用Role的话,我们可以设定一个用户同时属于多个用户组,貌似功能很强大哟。继续读项目需求,发现这些项目的用户对象还有不少Login控件中没有的属性要保存,回头再去翻MSDN,发现Profile可以帮我们解决这个问题。
  嗯,除开使用Login控件,运行aspnet_sqlreg.exe帮我们建立的上十个表,三十多条存储过程,上十个视图等,我们再不用建表保存用户的任何信息了,以后我们只用在Web.config文件和相应的cs代码中加上Role和Profile的处理代码,即可完成该项目的登陆,用户管理,密码修改功能。算算投入查MSDN,Google及修改Web.config文件和相应的cs代码的时间,相信原来自己写过自定义Login控件的朋友已经准备发誓再也不碰Asp.net 2.0自带的Login控件了。
  其实,我们完全有更简洁通用的办法来重用Asp.net 2.0自带的Login控件,即只用它最基本的登陆及修改密码功能,这2个基本功能照旧从工具箱拖个控件出来往Web表单上一扔即可,一行代码都不多加。其他的用户/用户组管理,权限管理不用扯上Login控件,数据库想用什么产品就用什么产品,mysql/db2/infomax来者不拒;表结构想怎么设计就怎么设计,E-R图,UML图直接照搬就成;用户/用户组管理和权限管理模块想怎么规定就怎么规定,自关联,无限分级都行。总之一句话:让Login控件附带的上十个表,三十多条存储过程,上十个视图见鬼去吧。
  下面细说实现方法,Asp.net 2.0的Login控件用到了3个类来从数据库中获取相应的数据,分别是MemberShipprovider,RoleProvider及ProfileProvider,系统自带的这3个类的方法的代码被隐藏起来了,尽管没公开,但实际上就是使用我上面一直念叨的上十个表,三十多条存储过程,上十个视图。不管你用什么数据库,只要想使用Login控件的所有功能,必须保证该数据库中有与之对应的十来个表,三十多条存储过程,十来个视图。
  当然,MS的架构设计师也不是某些人想象中的那么无能,上面的这三个类其实都是抽象类,系统的Login控件实际调用的是从这3个类派生出来的针对SQL Server2000/2005的数据操作类,灵活的架构设计正是在这里体现出来。既然MemberShipProvider,RoleProvider及ProfileProvider三大头是抽象类,那么我们完全可以自定义一个只针对用户表的username及password2个列操作的MemberShipprovider派生类出来,重写登陆验证,修改密码以及其调用的方法,然后在Web.config中把membership的提供者指定为我们自己写的MemberShipprovider派生类,这样我们就可以和原来一样,把Login控件的登陆和修改密码2个子控件往Web表单上一拖了事。
  下面开始贴代码,懒的深究的朋友们可以直接把我给出的cs代码贴回去,建个cs文件放到App_Code目录下,然后按照后面的Web.config修改相应的connectionStrings和membership即可,以后任何项目要利用Asp.net 2.0的Login控件的登陆和修改密码都是这样照葫芦画瓢,够傻瓜吧。

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Data.SqlClient;
using  System.Collections.Generic;
using  System.Text.RegularExpressions;
using  System.Data.SqlTypes;
using  System.Web;
using  System.Web.Security;

/// <summary>
/// MyMemberShip 的摘要说明
/// </summary>

public   class  MyMemberShip : MembershipProvider
{
    
private bool _requiresQuestionAndAnswer;
    
private int _minRequiredPasswordLength; 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我是一个AI语言模型,无法在本地完成代码编写、编译及运行。不过,我可以为您提供实验的逻辑思路和ASP.NET开发的环境部署,供您参考。 1. ASP.NET开发软件安装及环境部署 首先,您需要安装Visual Studio开发环境和SQL Server数据库。在安装Visual Studio时,请务必选择安装ASP.NET和Web开发相关的组件。安装完成后,您可以在Visual Studio中创建一个空白的ASP.NET Web应用程序,这将为您创建一个预先配置好的Web应用程序项目。 在创建项目时,您需要选择使用.NET Framework版本,以及Web应用程序的类型。在这种情况下,您需要选择ASP.NET Web Forms应用程序类型。 2. 分析任务实现的逻辑思路 用户注册和登录通常涉及以下几个步骤: - 用户输入用户名和密码。 - 系统验证用户名和密码是否正确。 - 如果用户名和密码正确,则将用户重定向到主页。 - 如果用户名和密码不正确,则显示错误消息并提示用户重新输入。 为了实现用户注册和登录,您可以使用ASP.NET提供的Login件。Login件提供了一个登录表单,其中包含用户名和密码字段以及登录按钮,还提供了一个注册链接,以便用户可以注册新帐户。 在使用Login件时,您需要执行以下步骤: - 将Login件添加到Web表单中。 - 设置Login件的属性,如MembershipProvider、DestinationPageUrl、DisplayRememberMe等。 - 在Web表单中添加其他件,如Label、Button等,以便显示错误消息或执行其他操作。 - 在Web表单的代码文件中处理Login件的事件,如Login1_Authenticate、Login1_LoginError等。 3. 独立完成程序设计的源代码编写、编译及运行 以下是一个简单的ASP.NET Web应用程序,演示如何使用Login件实现用户注册和登录功能。您可以根据自己的需求进行修改和扩展。 1. Default.aspx文件 ```html <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Default</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Login ID="Login1" runat="server" DestinationPageUrl="~/Home.aspx"></asp:Login> </div> </form> </body> </html> ``` 2. Default.aspx.cs文件 ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { if (Membership.ValidateUser(Login1.UserName, Login1.Password)) { e.Authenticated = true; } else { e.Authenticated = false; } } protected void Login1_LoginError(object sender, EventArgs e) { Login1.FailureText = "Invalid username or password."; } } } ``` 在这个示例中,我们将Login件添加到Web表单中,并设置了DestinationPageUrl属性,以便将用户重定向到主页。在代码文件中,我们处理了Login件的Authenticate和LoginError事件,并在Authenticate事件中验证用户名和密码是否正确,如果正确,则将Authenticated属性设置为true,否则将Authenticated属性设置为false,在LoginError事件中,我们设置了FailureText属性,以便显示错误消息。 当用户提交登录表单时,系统将调用Authenticate事件处理程序,并验证用户名和密码。如果验证通过,则将用户重定向到主页,否则将显示错误消息。 在实现用户注册功能时,您可以使用ASP.NET提供的Membership API,它提供了一组用于管理用户的方法和属性。您可以使用Membership API创建新用户,验证现有用户的凭据,以及执行其他相关功能。 这里展示了一个简单的ASP.NET Web应用程序,演示如何使用Login件实现用户注册和登录功能。当然,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值