• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

ASP.NET Whidbey中实现Provider(2)

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 12次 | 进入软件测试论坛讨论

领测软件测试网      可以看出,Whidbey默认使用SqlMembershipProvider或者AccessMembershipProvider来进行用户验证和管理。这两个Provider实现了IProvider和IMembershipProvider接口,实际上这两个接口也是每个MembershipProvider所必需的,其中IProvider负责Provider的初始化,而IMembershipProvider则实现MembershipProvider的主要功能。它们的定义如下:
  
  namespace System.Configuration.Provider
  {
   public interface IProvider
   {
    public string Name { get; }
    public void Initialize(string name,
    System.Collections.Specialized.NameValueCollection config);
   }
  }
  
  namespace System.Web.Security
  {
   public interface IMembershipProvider
   {
    public bool ChangePassword(string name, string oldPwd, string newPwd);
    public bool ChangePasswordQuestionAndAnswer(string name, string password,
  string newPwdQuestion, string newPwdAnswer);
    public System.Web.Security.MembershipUser CreateUser(string username, string password, string email,out System.Web.Security.MembershipCreateStatus status);
    public bool DeleteUser(string name);
    public System.Web.Security.MembershipUserCollection GetAllUsers();
    public int GetNumberOfUsersOnline();
    public string GetPassword(string name, string answer);
    public System.Web.Security.MembershipUser GetUser(string name,bool userIsOnline);
    public string GetUserNameByEmail(string email);
    public string ResetPassword(string name, string answer);
    public void UpdateUser(System.Web.Security.MembershipUser user);
    public bool ValidateUser(string name, string password);
    public string ApplicationName {get; set;}
    public bool EnablePasswordReset { get;}
    public bool EnablePasswordRetrieval { get;}
    public bool RequiresQuestionAndAnswer { get;}
   }
  }
  
    现在可以动手来实现我们自己的MembershipProvider了:
  
  public class MyMembershipProvider : IProvider, IMembershipProvider
  {
   ……
  }
  
    验证功能是必需的:
  
  public bool ValidateUser (string name, string password)
  {
   string connectStr = ConfigurationSettings.ConnectionStrings["PortalData"];
   SqlConnection myConnection = new SqlConnection (connectStr);
   SqlCommand myCommand = new SqlCommand ("UserLogin", myConnection);
   myCommand.CommandType = CommandType.StoredProcedure;
  
   // Add Parameters to SPROC
   SqlParameter parameterEmail = new SqlParameter ("@Email", SqlDbType.NVarChar, 100);
   parameterEmail.Value = name;
   myCommand.Parameters.Add (parameterEmail);
  
   SqlParameter parametERPassword = new SqlParameter ("@Password", SqlDbType.NVarChar, 20);
   parameterPassword.Value = password;
   myCommand.Parameters.Add (parameterPassword);
  
   SqlParameter parameterUserName = new SqlParameter ("@UserName", SqlDbType.NVarChar, 100);
   parameterUserName.Direction = ParameterDirection.Output;
   myCommand.Parameters.Add (parameterUserName);  
  
   // Open the database connection and execute the command
   myConnection.Open ();
   myCommand.ExecuteNonQuery ();
   myConnection.Close ();
   if ((parameterUserName.Value != null) && (parameterUserName.Value != System.DBNull.Value))
    return true;
    return false;
  }
  
  
  
    现在在web.config中可以这样配置connectionString了:
  
  <connectionStrings>
  
  <add name="BugDepotData" connectionString="Data Source=(local);Trusted_Connection=true;Database=Portal" />
  
  </connectionStrings>
  
    这样,我们自己的一个简单的MembershipProvider就基本上完成了。接下来需要配置web.config,让需要Provider服务的控件能够认识它:
  
  <membership>
   <providers>
    <add name="MyMembershipProvider" type="MyMembershipProvider" appName="/" />
   </providers>
  </membership>
  
    这段设置是参考machine.config而来的,其中type属性的值是这样的字符串:
  
  type="ProviderType, Assembly, Version, Culture, PublicKeyToken"
  
    由于我们的MyMembershipProvider放在/Code目录下,并不是在单独的Assembly中,因此只需要指出ProviderType就行了。
  
    这样,一个具有验证功能的Provider就完成了,现在可以在页面上放一个新的Security控件,比如Login控件,并指定它的MembershipProperty为MyMembershipProvider(或者也可以设置membership的defaultProvider属性为MyMembershipProvider),打开Forms验证,试试是不是已经能够成功登陆了?
  
  

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网