Как проверить пользователя с помощью LINQ to SQL? - PullRequest
0 голосов
/ 14 февраля 2009

Я пытаюсь понять, как проверить пользователя в моем приложении, но я не знаю как. Я хотел бы создать форму с именем пользователя и паролем для входа в приложение (WPF), используя Linq toSql для хранения и проверки имени пользователя и пароля в базе данных, но я не очень много знаю о Linq to Sql, поэтому я застрял в этом сейчас У меня есть база данных с этими полями "UserID, UserTypeID, имя, фамилия, имя пользователя, пароль, электронная почта" и здесь есть код, который я использую:

public Window1()
    {
        InitializeComponent();

    }

    public bool ValidateApplicationUser(string userName, string password)
    {
        bool validUser = false;
        try
        {
         //   var conn = "Data Source=MAMMA-PC/SQLMAMMA;Initial Catalog=MyWebSite;Integrated Security=True";
            DataClasses1DataContext dc = new DataClasses1DataContext();
            Table<User> users = dc.GetTable<User>();

            var query = from c in dc.Users
                        where (c.Username == userName.ToLower() && c.Password == password.ToLower())
                        select c;

            validUser = (query != null);

        }
        catch (Exception ex)
        {
            if (ex != null)
            {
            }
        }

        return validUser;
    }

    private void mahhh(object sender, RoutedEventArgs e)
    {



        bool authenticated = true;
     //   var conn = "Data Source=MAMMA-PC/SQLMAMMA;Initial Catalog=MyWebSite;Integrated Security=True";
            DataClasses1DataContext dc = new DataClasses1DataContext();
            Table<User> users = dc.GetTable<User>();

            var query = from c in dc.Users
                        where (c.Username == usernameTextBox.Text.ToString() && c.Password == passwordTextBox.Text.ToString())
                        select c;

      /*      foreach (User user in query)
            {
                user.Username = usernameTextBox.Text.Trim();
                user.Password = passwordTextBox.Text.Trim();
            } */


        {
            if (usernameTextBox.Text !="" && passwordTextBox.Text != "")
            {
                authenticated = ValidateApplicationUser(usernameTextBox.Text , passwordTextBox.Text);
            }

        }
        if (!authenticated)
        {
            MessageBox.Show("Invalid login. Try again.");
        }
        else
        {
            MessageBox.Show("Congradulations! You're a valid user!");


    //        Window2 c = new Window2();
    //        c.ShowDialog();
            this.Close();
        }

    }

Когда я вставляю пароль и имя пользователя, форма проверяет также неправильные имя пользователя и пароль, поэтому я всегда получаю сообщение «Поздравляем! Ты действительный пользователь!» !!!

У вас есть совет, где я не прав?

Bye

Ответы [ 2 ]

3 голосов
/ 14 февраля 2009

Во-первых, рекомендуется хешировать пароли (одностороннее шифрование) с помощью соли (случайная строка, которую вы помечаете в конце пароля), я знаю, что это звучит сложно, но это не так.

Не стоит начинать все с попытки, если только вы не

Код Linq будет

public bool ValidateApplicationUser(string userName, string password)
{
    //Get Database Context
    var AuthContext = new DataClasses1DataContext();

    //We Are Only Going To Select UserId, Notice The Password .ToLower Is Removed (for security)
    var query = from c in AuthContext.Users
                where (c.Username == userName.ToLower() && c.Password == password)
                select c;

    if (query.Count() != 0) {
       return true;
    }

    return false;
}

Соль может быть выполнена с использованием базы данных или C #

http://blog.stevex.net/index.php/c-code-snippet-creating-an-md5-hash-string/

1 голос
/ 14 февраля 2009
validUser = (query.Count() == 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...