繁体   English   中英

如何仅在使用c#winform输入表单而不是asp.netc#时检查用户是否登录

[英]How to check if user is log in once enter a form using c# winform only, no asp.netc#

没有使用asp.net C#

我需要知道用户输入表单后是否已登录,如果他/她未登录,则返回到登录表单。 我到处看到的人都使用asp.net来实现这一目标,但我想知道如何不使用asp.net来做到这一点。

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

        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 User
{
    public string Name { get; }
    public int RoleId { get; }

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

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

我希望这可以帮助你。 如果您需要更多信息,请这样说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM