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