Как сделать простую форму входа с помощью FormsAuthentication и MySQL?

Я пытался найти, как это сделать, но все, что я могу найти, кажется слишком сложным и всеобъемлющим, и я не могу понять, как это работает. Моя ситуация следующая:

У меня есть простая таблица MySQL под названием users с тремя атрибутами: user_id, username и password.

На странице 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. Любая помощь приветствуется.


person guitarzero    schedule 17.12.2013    source источник


Ответы (2)


Аутентификация с помощью форм — это не то же самое, что членство. Объяснение

У вас все настроено правильно. Web.config — это место, где вы включаете проверку подлинности с помощью форм, которая по сути является модулем HTTP, который проверяет наличие файла cookie ASPXAUTH. Чтобы изначально установить файл cookie в вашем коде после проверки пароля, используйте:

FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); 

Я думаю, что это пространство имен System.Web.dll, System.Web.Security.

Ваши последующие запросы будут иметь указанное вами имя пользователя.

Имейте в виду, что хранить пароли в виде простого текста — плохая идея. Используйте хеширование.

person 0leg    schedule 17.12.2013

См. эту ссылку.

Не обращайте внимания на то, что они говорят о хранимых процедурах. Затем проверьте этот код

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();
        }
    }
}

Дайте мне знать, если какой-либо запрос останется.

Ваше здоровье

person Muhammad Atif Nadeem    schedule 17.12.2013
comment
Спасибо за ваш ответ. Я проверю это. - person guitarzero; 17.12.2013