C#WPF登录,如果成功登录,则将登录凭据重新用于下一个窗口

C#WPF登录,如果成功登录,则将登录凭据重新用于下一个窗口,c#,wpf,C#,Wpf,假设我有一个登录页面。我正在尝试登录。如果它的用户凭据正确并且存在于数据库中,那么它将允许用户登录,但我希望将正确的凭据重新用于我的新窗口。示例在新窗口中有一个文本块,指示当前用户及其当前角色。我该怎么做?我是否应该创建一个名为sessions的新表,如果登录成功,则将凭据存储到sessions\u tbl,然后在session中获取最新信息,但idk如何做到这一点,是否有人可以帮助我找到最佳方法,抱歉,如果我是哑巴,2周前刚刚开始 这是我的登录代码 private void Loggi

假设我有一个登录页面。我正在尝试登录。如果它的用户凭据正确并且存在于数据库中,那么它将允许用户登录,但我希望将正确的凭据重新用于我的新窗口。示例在新窗口中有一个文本块,指示当前用户及其当前角色。我该怎么做?我是否应该创建一个名为sessions的新表,如果登录成功,则将凭据存储到sessions\u tbl,然后在session中获取最新信息,但idk如何做到这一点,是否有人可以帮助我找到最佳方法,抱歉,如果我是哑巴,2周前刚刚开始

这是我的登录代码

    private void LoggingIn()
    {
        SqlConnection sqlCon = new SqlConnection(@"Data Source=localhost\SQLEXPRESS; Initial Catalog=SalesDB; Integrated Security=true;"); // this is the connection to the database
        try
        {
            if (sqlCon.State == ConnectionState.Closed)
            {
                sqlCon.Open();
            }
            String query = "SELECT COUNT(1) FROM users_tbl where Username=@Username AND Password=@Password";
            SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.Parameters.AddWithValue("@Username", txtUsername.Text);
            sqlCmd.Parameters.AddWithValue("@Password", txtPassword.Password);
            int count = Convert.ToInt32(sqlCmd.ExecuteScalar()); //if true the value will be converted to "1" in integer.

            if (count == 1)
            {
                MainWindow dashboard = new MainWindow();
                dashboard.Show();
                this.Close();
            }
            else
            {
                MessageBox.Show("Username or Password is incorrect. ");
                txtUsername.Focus();
                txtUsername.Clear();
                txtPassword.Clear();
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sqlCon.Close();
        }
    }

    //login button codes
    private void btnSubmit_Click(object sender, RoutedEventArgs e)
    {
        LoggingIn();
    }
=====================

    private void LoggingIn()
    {
        SqlConnection sqlCon = new SqlConnection(@"Data Source=localhost\SQLEXPRESS; Initial Catalog=SalesDB; Integrated Security=true;"); // this is the connection to the database
        try
        {
            if (sqlCon.State == ConnectionState.Closed)
            {
                sqlCon.Open();
            }
            String query = "SELECT COUNT(1) FROM users_tbl where Username=@Username AND Password=@Password";
            SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.Parameters.AddWithValue("@Username", txtUsername.Text);
            sqlCmd.Parameters.AddWithValue("@Password", txtPassword.Password);
            int count = Convert.ToInt32(sqlCmd.ExecuteScalar()); //if true the value will be converted to "1" in integer.

            if (count == 1)
            {
                LoginInfo userInfo = new LoginInfo();

                using (SqlDataReader oReader = sqlCmd.ExecuteReader())
                {
                    while (oReader.Read())
                    {
                        userInfo.UserName = oReader["Username"].ToString();
                        userInfo.PassWord = oReader["Password"].ToString();
                        userInfo.Role = oReader["Role"].ToString();
                        userInfo.FirstName = oReader["First_Name"].ToString();
                        userInfo.LastName = oReader["Last_Name"].ToString();
                    }
                }

                MainWindow dashboard = new MainWindow();
                dashboard.Show();
                this.Close();
            }

可以作为参数传递到下一个窗口

 MainWindow dashboard = new MainWindow(LoginInfo loginDetails);
其中,LoginInfo是一个保存必要详细信息的类

public class LoginInfo{
   //add username
   // whatever
}
在第一个窗口中,将值指定给对象,如下所示:

LoginInfo userInfo = new LoginInfo();
userInfo.username = 'test';

然后你可以进入下一个窗口

请不要这样实现登录!这被认为是一种糟糕的做法,也是一个巨大的安全漏洞

您可以选择使用WPF实现自己的身份验证和授权

NET Framework使用System.Security.Principal.IIdentity和System.Security.Principal.IPrincipal接口作为身份验证和授权的基础,通过实现这些相当简单的接口,您可以在应用程序中应用自己的自定义身份验证

看看这些:


那是一门课吗?我应该创建一个包含登录信息的类吗?是的!这只是一个样本我试过你说的但为什么我得到一个空值?如果用户名和密码是正确的,那么我将把它传递给userInfo对象,下面是代码,但它显示为null…这不仅仅是错误的做法,它是一个巨大的安全漏洞!