如何使用FormsAuthentication和MySQL创建一个简单的登录表单?

时间:2013-12-17 19:03:39

标签: c# mysql asp.net forms-authentication

我已经尝试过如何实现这一目标,但我能找到的一切看起来都太复杂和全面,以至于我无法真正理解它是如何运作的。以下是我的情况:

我有一个名为users的简单 MySQL 表,其中包含三个属性:user_idusernamepassword

ASP.NET 页面中,我有两个文本框和一个登录按钮。

我读过我可以使用FormsAuthentication,但我无法弄清楚它是如何工作的。我必须使用“会员”吗?或者我可以在没有它的情况下使用FormsAuthentication吗?我希望尽可能简单。

到目前为止,我只是做了一个像这样的选择:

        String query = "SELECT * FROM users WHERE username = @UserName
           AND password = @Password;";
        cmd = new MySqlCommand(query, conn);
        cmd.Parameters.AddWithValue("@UserName", userName);
        cmd.Parameters.AddWithValue("@Password", password);

在我的代码隐藏中,我有这个:

        String username = txtUsername.Text;
        String password = txtPassword.Text;

        User user = database.LogIn(username, password);

最后在我的web.config文件中我有这个:

      <authentication mode="Forms">
        <forms name="MyCookieName"
               loginUrl="~/Default.aspx"
               timeout="10"
               protection="All"
               path="/">
        </forms>
      </authentication>
      <authorization>
        <deny users="?"/>
      </authorization>

到目前为止,我可以验证用户是否输入了有效输入,但我不明白如何应用FormsAuthentication。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

请参阅此link

忽略他们对存储过程的看法。然后查看此代码

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    MySqlConnection conn;

    if(Request.IsAuthenticated)
    {
        try 
        {
            conn = new MySqlConnection("server=Cheese;user id=george; password=blah; database=mysql; pooling=false");
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = 
               "SELECT G.Name  FROM Roles R INNER JOIN Groups G ON R.GroupID = G.GroupID INNER JOIN Users U ON  R.UserID = U.UserID AND U.Username = ?";
            cmd.Parameters.Add("UserName",User.Identity.Name);
            conn.Open()
            MySqlDataReader r = cmd.ExecuteReader();
            ArrayList groups = new ArrayList();

            while(r.Read())
                {
                    groups.Add(r.GetString(0));
            }

            HttpContext.Current.User = new GenericPrincipal(User.Identity, groups.ToArray(typeof(System.String)));
        }
        finally
        {
            conn.Close();
        }
    }
}

如果有任何疑问,请与我们联系。

干杯

答案 1 :(得分:0)

表单身份验证与成员身份不同。 Explanation

您已正确设置所有内容。 Web.config是您启用Forms Auth的地方,它本质上是一个检查ASPXAUTH cookie的HTTP模块。为了在验证密码后最初在代码中设置cookie:

FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); 

我认为这是在System.Web.dllSystem.Web.Security名称空间。

您的后续请求将包含您指定的用户名。

请记住,以纯文本格式存储密码是个坏主意。使用散列。

答案 2 :(得分:0)

string username,password;
if(username=="mohammadreza"&password=="12345")
{
    messageox.show("welcome");
    form1.activeform.enable=true;
}