Как проверить, авторизован ли пользователь один раз, введите форму, используя только c # winform, без asp.netc # - PullRequest
0 голосов
/ 23 ноября 2018

NO asp.net c # используется

Мне нужно знать, является ли пользователь логином, как только он / она вводит форму, и если он / она не авторизован, он возвращается кФорма входаВезде, где я видел, люди использовали asp.net для достижения этой цели, но я хочу знать, как это сделать без использования asp.net.

public DataTable Login (String Username, String Password) {

        server = "localhost";
        database = "xxxx";
        uid = "root";
        password = "";

        string MySQLConnectionString = $"datasource=127.0.0.1;port = 3306; SERVER={server}; DATABASE={database}; USERNAME={uid}; PASSWORD={password};sslmode=none";

        MySqlConnection db_Conn = new MySqlConnection(MySQLConnectionString);

        MySqlCommand cmd = new MySqlCommand();

        db_Conn.ConnectionString = MySQLConnectionString;

        string username_txtfield = username_txtbox.Text;
        string pw_txtfield = password_txtbox.Text;

        try
        {

            db_Conn.Open();
            cmd.Connection = db_Conn;

            cmd.CommandText = "SELECT count(*),user_id,person_username,role_id FROM user_tb " +
                "WHERE person_username=@username " +
                "AND user_password=@password";

            cmd.Prepare();
            cmd.Parameters.AddWithValue("@username", username_txtfield);
            cmd.Parameters.AddWithValue("@password", pw_txtfield);

            MySqlDataReader dr = cmd.ExecuteReader();

            DataTable dt = new DataTable();
            dt.Load(dr);
            db_Conn.Close();

            return dt;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

логин btn в моей форме логина

    private void button1_Click(object sender, EventArgs e)
    {
        //login();
        try
        {
            DataTable result = Login(username_txtbox.Text, password_txtbox.Text);
            if (result.Rows.Count == 1)
            {
                this.Hide();

                string role = result.Rows[0]["role_id"].ToString();


                switch (role)
                {
                    case "3":
                        MessageBox.Show("User login successfully!");
                        user_form_page();
                        break;

                    case "1":

                        MessageBox.Show("Admin login successfully!");
                        //this.Hide();
                        Admin_page admin_form = new Admin_page();
                        admin_form.ShowDialog();
                        this.Close();
                        break;
                }
            }
            else
            {
                MessageBox.Show("INVALID USERNAME OR PASSWORD");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

1 Ответ

0 голосов
/ 23 ноября 2018

Конечно, службы идентификации ASP.Net - это зрелый способ решения такой задачи, но если вы хотите, вы можете иметь свой собственный метод аутентификации, но вам нужно будет реализовать много вещей.

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

public static class Authentication
{
    public static User CurrentUser { get; private set; }

    public static bool Login(User user)
    {
        if(user == null)
            throw new ArgumentException("Invalid user","user");
        CurrentUser = user;
    }
}

Это просто самая базовая реализация такой вещи, которую вы можете затем проверить, является ли CurrentUser нулем или нет, и направить пользователя на страницу входа или показать ей результаты.

По мере роста ваших потребностей вам потребуется реализовать больше вещей.Выход из системы, локальная или удаленная база данных для пользователей, хранит в настоящий момент зарегистрированного пользователя на диске, так что ей не нужно повторно входить в систему после закрытия приложения и многих других вещей

Редактировать

Основываясь на своей новой информации, вы можете добавить эту строку к своей кнопке входа в систему, щелкнув мышью так:

if (result.Rows.Count == 1)
{
    Authentication.Login(new User(result.Rows[0]["username"],result.Rows[0]["role_id"])
    //The rest of code
}

Я также предположил, что у вас есть такой класс:

class User
{
    public string Name { get; }
    public int RoleId { get; }

    public User(string name, int roleId)
    {
        Name = name;
        RoleId = roleId;
    }
}

И затем вы должны проверить Authentication.CurrentUser против null в своей пользовательской форме или в конструкторах административной формы, чтобы убедиться, что пользователь входит в систему. Вы можете использовать информацию в Authentication.CurrentUser, чтобы отобразить имя пользователя или роль, зарегистрированную в системе, или любую другую информацию.

Надеюсь, это поможет вам.Если вам нужна дополнительная информация, пожалуйста, скажите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...