c# - 仅使用c# winform,不使用asp.netc#输入表单后如何检查用户是否登录

标签 c# mysql winforms

未使用asp.net c#

我需要知道用户输入表单后是否登录,如果他/她没有登录,他将返回登录表单。我到处都看到人们使用 ASP.NET 来实现这一目标,但我想知道如何在不使用 ASP.NET 的情况下实现这一目标。

公共(public)数据表登录(字符串用户名,字符串密码) {

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

    }

最佳答案

当然,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 是否为 null 并引导用户登录页面或向她显示结果。

随着您的需求增长,您将需要实现更多的东西。注销,用户的本地或远程数据库,将当前登录的用户存储在磁盘中,以便她在关闭应用程序和许多其他操作后不需要再次登录

编辑

根据您的新信息,您可以将此行添加到您的登录按钮中,如下所示:

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

我还假设您有这样的类(class):

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

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

然后您必须在用户表单或管理表单构造函数中检查 Authentication.CurrentUsernull 以确保用户登录,您可以使用 中的信息Authentication.CurrentUser 显示登录的用户名或角色或任何其他信息。

希望这对您有帮助。如果您需要更多信息,请说明。

关于c# - 仅使用c# winform,不使用asp.netc#输入表单后如何检查用户是否登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451318/

相关文章:

mysql - 从mysql存储过程中的mysql结果集获取最后的结果

c# - Windows 窗体在没有文本框的情况下添加文本

c# - 如何在visual studio中修改新WinForm的默认属性

c# - SelectListItem 投影的 EFCore SqlException 对值和文本使用相同的属性

C# + WinRT + 用于网络(Azure 移动服务)操作的 Monogame 线程

where条件的MySql进程顺序

java.sql.SQLException : Access denied for user 'root' @'192.168.3.33' (using password: YES) on jelastic

c# - C#中如何将数据表绑定(bind)到datagridview

C# ToolStrip 标签有时会先打印最后一个字符

c# - 为什么要使用事件?