使用 Membership.ValidateUser(Login1.UserName, Login1.Password)驗證使用者

來源:互聯網
上載者:User

      要為後台寫一個登陸介面,asp.net 內建Login空間,因為直接就可以了。

      雙擊添加的Login空間將出現如下代碼:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)<br /> {<br /> bool Authenticated = false;<br /> // Authenticated = AdminDB.Login(Login1.UserName,Login1.Password);<br /> Authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);<br /> e.Authenticated = Authenticated;<br /> if (Authenticated == true)<br /> {<br /> Response.Redirect("自訂跳轉方向,如http://163.com或index.aspx");<br /> }<br /> else<br /> Login1.FailureText = "使用者名稱或密碼錯誤";<br /> }

這裡直接調用了System.Web.Security.Membership.ValidateUser(username,password)方法,這樣就不用自己再寫驗證sql語句了。

不過這裡的ValidateUser(username,password)只能驗證使用者名稱和密碼是否匹配,而不能驗證其他的內容,為了能夠自訂驗證內容,我們寫了一個驗證程式。代碼如下:

AdminDB.cs

using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using System.Data.SqlClient;<br />using MyProviders;<br />/// <summary><br />/// AdminDB 的摘要說明<br />/// </summary><br />/// </p><p>namespace NewsSystem<br />{<br /> public class AdminDB<br /> {<br /> public AdminDB()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }<br /> public static bool Login(string name, string pwd)<br /> {<br /> SqlConnection conn = NewsDB.CreatCon();<br /> try<br /> {<br /> // String strsql = "select * from dbo.AdminUser where mg_login=@login and mg_pwd=@pwd";<br /> //限定UserRoles.roleid=0即只有管理員角色才能登入<br /> //需要注意的是這裡字串很長,在換行時首字元最好流出一個空格。<br /> string strsql = "select * from (((aspnet_Membership INNER JOIN aspnet_users ON "+<br /> " aspnet_Membership.UserId = aspnet_users.UserId) INNER JOIN Users ON "+<br /> " aspnet_users.username=Users.username) INNER JOIN UserRoles ON "+<br /> " Users.userid=UserRoles.userid) where Users.Username=@name and aspnet_Membership.password=@pwd "+<br /> " and UserRoles.roleid=0";</p><p> SqlParameter[] paras = new SqlParameter[2];<br /> paras[0] = new SqlParameter("@name", SqlDbType.VarChar, 50);<br /> paras[0].Value = name;</p><p> paras[1] = new SqlParameter("@pwd", SqlDbType.VarChar, 50);<br /> //paras[1].Value = pwd;<br /> paras[1].Value = MyProviders.MySQLMembershipProvider.GetMd5(pwd);//將密碼轉化為md5格式</p><p> SqlCommand cmd = new SqlCommand(strsql, conn);<br /> for (int i = 0; i < paras.Length; i++)<br /> {<br /> cmd.Parameters.Add(paras[i]);<br /> }<br /> conn.Open();<br /> SqlDataReader dr = cmd.ExecuteReader();<br /> if (dr.Read())<br /> {<br /> return true;<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> finally<br /> {<br /> conn.Close();<br /> }<br /> return false;<br /> }<br /> }<br />}

NewsDB.cs

using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using System.Data.SqlClient;<br />/// <summary><br />/// DB 的摘要說明<br />/// </summary><br />/// </p><p>namespace NewsSystem<br />{<br /> public class NewsDB<br /> {<br /> public NewsDB()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }<br /> public static SqlConnection CreatCon()<br /> {<br /> string str = ConfigurationManager.AppSettings["SiteSqlServer"];<br /> return new SqlConnection(str);<br /> }<br /> public static bool Getcmd(String strsql, params SqlParameter[] paras)<br /> {<br /> SqlConnection conn = NewsDB.CreatCon();<br /> try<br /> {<br /> conn.Open();<br /> SqlCommand cmd = new SqlCommand(strsql, conn);<br /> for (int i = 0; i < paras.Length; i++)<br /> {<br /> cmd.Parameters.Add(paras[i]);<br /> }<br /> int a = Convert.ToInt32(cmd.ExecuteNonQuery());<br /> if (a > 0)<br /> {<br /> return true;<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> finally<br /> {<br /> conn.Close();<br /> }<br /> return false;<br /> }<br /> public static DataSet Getds(String strsql)<br /> {<br /> SqlConnection con = NewsDB.CreatCon();<br /> DataSet ds = null;<br /> try<br /> {<br /> SqlDataAdapter da = new SqlDataAdapter(strsql, con);<br /> ds = new DataSet();<br /> da.Fill(ds);<br /> }<br /> catch (Exception er)<br /> {<br /> throw er;<br /> }<br /> return ds;<br /> }<br /> }<br />}

public static bool Login(string name, string pwd){}

中我們可以自訂sql語句,比如我們上面的例子就有驗證了使用者的角色。

參考文章:Visual Studio 2005 Login 控制項的使用

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.