【asp.net core】ASP.NET Whidbey中实现Provider

更新时间:2017-11-02 来源:工具 点击:

【www.hzclsc.cn--工具】

  “Whidbey”是微软工具套件的下一个版本。按照微软的计划,它将会在2004年底推出。


  Asp.Net 2.0(codename Whidbey)通过Provider模式为用户验证、角色管理等方面提供了非常强大易用的框架模型。Whidbey中提供了一个Asp.Net configuration工具,通过它可以非常容易地配置用户信息数据库,管理角色等等,再与新加入的Security控件配合,几乎不用写什么代码就能够实现用户验证和角色管理功能。关于这些控件和配置工具的具体使用,可以参考这篇文章:使用更精简的代码保证 ASP.NET 应用程序的安全


  但是在PDC Preview版本的Whidbey中,这个配置工具的功能还不是很完善。从我使用的情况来看,它目前还只能创建和连接自己的Demo用的Access数据库,不能连接SQL Server数据库进行扩展。因此,为了能够连接SQL Server,我们必须提供我们自己的Providers。这里以连接IBuySpy的Portal数据库为例来说明如何实现一个Membership Provider。


  为了搞清楚如何实现我们自己的Membership Provider,有必要先看看Whidbey默认使用的Membership Provider是如何做的。在machine.config配置文件中,Whidbey使用类似下面这样的配置实现:


<membership defaultProvider="AspNetAccessProvider" userIsOnlineTimeWindow="15" >
<providers>
<add name="AspNetSqlProvider"
 type="System.Web.Security.SqlMembershipProvider, System.Web, Version=1.2.3400.0,  Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="Stores and retrieves membership data from the local Microsoft SQL Server database"
/>


<add name="AspNetAccessProvider"
type="System.Web.Security.AccessMembershipProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="AccessFileName"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="Stores and retrieves membership data from the local Microsoft Access database file"
/>


</providers>
</membership> 


  关于这段配置文件的更详细解说,可以参考《A First Look at ASP.NET v. 2.0》。
  可以看出,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验证,试试是不是已经能够成功登陆了?


本文来源:http://www.hzclsc.cn/ruanjianzixun/3103.html

为您推荐

[叛逆机械师扳手怎么办]叛逆机械师扳手怎么用 叛逆机械师扳手获得及使用方法

叛逆机械师(Iconoclasts)游戏中父亲留给罗宾的扳手是一个很重的工具,那么我们该怎么获得又该怎么使用它呢?下面就来分享一下叛逆机械师扳手工具获得及使用方法。叛逆机械师扳手工具获得及使用方法回到角色扮演

2020-12-18 17:04:52  

我的世界观察者的作用_我的世界观察者合成方法 我的世界观察者使用方法

我的世界观察者合成方法 我的世界观察者使用方法时间:2018 1 15 17:12:39来源:www pc6 com作者:佚名我要评论我的世界中观察者是在PE版中一个实用的工具,可以根据所观察的方块发

2020-12-16 23:04:43   我的世界观察者怎么做   我的世界观察者模式指令  

我的世界铁砧怎么做|我的世界铁砧合成及使用方法介绍 我的世界铁砧有什么用

我的世界铁砧合成及使用方法介绍 我的世界铁砧有什么用时间:2018 1 15 17:19:01来源:www pc6 com作者:佚名我要评论我的世界中铁砧是一个非常实用的工具,可以通过消耗经验值来修复

2020-12-16 23:04:43   我的世界铁砧怎么用   我的世界铁砧怎么修复  

[英特尔修复漏洞的cpu]英特尔cpu漏洞怎么修复 intelcpu漏洞补丁

最近由于CPU底层设计漏洞衍生的安全事件,引起了业内的大量关注,由于涉及极广,Intel、ARM、AMD等CPU产品纷纷遭受到影响,包括个人手机、电脑、服务器以及云计算都受到波及,厂商们纷纷更新打补系统工具

2020-12-15 17:04:41   英特尔cpu漏洞更新  

【一加5t root】一加5T砂岩白多少钱 一加5T砂岩白什么时候开卖

一加5t目前的配色是星辰黑、熔岩红两种,一加官方预告一加5T即将迎来新版本,官方连续给出了“石”字旁和“山”字头,由此推测一加5T即将推出的配色是砂岩白,那么一加5T砂岩白多少钱?什么时候开卖?下面跟硬件报道

2020-12-15 07:04:43   一加5t工具箱   一加5t发布时间   一加5t救砖