2012-07-27 70 views
0

我登录在我的asp页面需要名称/通行证和按钮。与数据库的ASP.NET登录验证

我在SqlDataSource创建connecttion串到我的数据库和SqlDataSource与查询以及在这里:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:CarRentalConnectionString %>" 
    SelectCommand="SELECT * FROM [Customers] WHERE (([UserName] = @UserName) AND ([PassWord] = @PassWord))"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="uname" Name="UserName" PropertyName="Text" Type="String" /> 
     <asp:ControlParameter ControlID="pass" Name="PassWord" PropertyName="Text" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

我的问题是我不知道如何主动/执行它,我怎么得到从查询中返回的数据?

我有一种感觉,我要在这个错误的方式(希望是错的),你

希望可以给我一个提示或点我在正确的方向:)

在此先感谢

+0

它看起来不像传统的ASP给我。我认为你需要用ASP.NET标签重新标记你的问题。 – TheCarver 2012-07-28 06:11:56

+0

:P对不起,你是对的 – user1246950 2012-07-28 10:19:58

回答

1

使用SqlDataSource是不恰当的,因为您不是简单地以声明方式检索数据。您需要程序化地定义用户验证(不验证)逻辑。

通常的方法如下。请注意,您应该散列您的密码,而不是以明文形式存储它们。为简洁起见,哈希盐渍已被忽略。

public static Boolean Authenticate(String userName, String password) { 

    using(SqlConnection c = new SqlConnection("myConnectionString") 
    using(SqlCommand cmd = c.CreateCommand()) { 
     c.Open(); 
     cmd.CommandText = "SELECT UserName, PasswordHash, OtherDataEtc FROM Users WHERE UserName = @userName"; 

     cmd.Parameters.Add("@userName", SqlDbType.Varchar, 50).Value = userEnteredUserName; 

     using(SqlDataReader rdr = cmd.ExecuteReader()) { 
      if(!rdr.Read()) return false; // no matching user found 

      Byte[] passwordHash = rdr.GetBytes(1); 
      Byte[] hash = Hash(userEnteredPassword); // Use at least SHA1 
      return Array.Equals(passwordHash, hash); 
     } 
    } 
} 

// Usage in ASP.NET: 

public override OnPageLoad(Object sender, EventArgs e) { 
    if(IsPostBack) { 
     Validate(); 
     if(IsValid) { 
      Boolean auth = Authenticate(this.userName, this.password); // member textbox controls 
      if(auth) { 
       FormsAuthentication.SetAuthCookie(this.userName, true); 
       FormsAuthentication.RedirectFromLoginPage("somewhere", true); 
      } else { 
       Response.Redirect("loginFailedPage"); 
      } 
     } 
    } 
} 
+0

THX,帮助和它的工作;)我认为有其他方式与Membership.ValidateUser这样做,但我真的不知道如何设置,希望谷歌可以帮助:) – user1246950 2012-07-28 12:46:46