登录表单出现问题

本文关键字:问题 表单 登录 | 更新日期: 2023-09-27 18:27:04

我编写了以下代码,使用C#和LINQ登录到我的应用程序。它连接到我在Visual Studio中创建的一个面向SQL服务的数据库。我遇到的问题是一个我不理解的问题,我希望有人能在这里帮助我。我已经创建了两个消息框,试图查看我的代码的输出购买我没有从中得到任何东西。

如果有人能帮忙那就太好了!

public bool UserLogin(string User, string Pass)
{
    var Database = new ExampleDataSet();
    var query = from Employee in Database.Employee
        where (Employee.EmployeeID.ToString() == Employee.ToLower() && Employee.Password == Pass)
        select Employee;
    if (query.Count() != 0)
    {
        return true;
        MessageBox.Show("You are logged in");
    }
    return false;
    MessageBox.Show("You are not logged in");
}
private void cmdLogin_Click(object sender, EventArgs e)
{
    string User = (txtUser.Text);
    string Pass = (txtPass.Text);
    UserLogin(User, Pass);
}

登录表单出现问题

从您编写的代码来看,问题似乎是将Employee的字符串表示与其EmployeeId属性Employee.EmployeeID.ToString() == Employee.ToLower()进行比较。除非重写Employee类的ToString()方法以返回属性EmployeeId(我想您没有),否则此行将始终返回false。请尝试此操作(假设参数User包含用户名称):

using(var dataSet = new ExampleDataSet())
{
    var loggedIn = dataSet.Employee.Any(e=>e.UserName == User && e.Password == Pass);
    var message = loggedIn ? "You are logged in" : "You are not logged in";
    MessageBox.Show(message);
    return loggedIn;
}

当您返回时,函数执行将停止,因为它已经完成,并将返回其调用的值。所以你回来后的任何事情都不会发生。尝试将MessageBox.Show置于return:之前

MessageBox.Show("You are logged in");
return true;

虚假版本也是如此。

在返回语句之后,消息框不会按原样显示-将消息框移到返回语句之前即可查看它们。

我已经对您的代码进行了更改。。。。你的if-else部分无效。。。。。。你是比较员工。员工本身的ID。。使用以下代码进行试用。。。。。

            public bool UserLogin(string User, string Pass)
            {
                var Database = new ExampleDataSet();
                var query = from Employee in Database.Employee
                            where (Employee.EmployeeID.ToString().ToLower().Equals(User.ToLower())&& Employee.Password.ToString().ToLower().Equals(Pass.ToLower())
                            select Employee;
                if (query.Count() != 0)
                {
                    MessageBox.Show("You are logged in");
                    return true;
                }
                else
                {
                    MessageBox.Show("You are not logged in");
                    return false;
                }

            }
            private void cmdLogin_Click(object sender, EventArgs e)
            {
            string User = (txtUser.Text);
            string Pass = (txtPass.Text);
            UserLogin(User, Pass);
            }

如果你的意思是user=employeeId

Employee.EmployeeID.ToString() == user.ToLower() 

如果不是:

Employee.EmployeeName.ToLower() == user.ToLower() 

关于消息框,您应该知道return之后的任何语句都不会执行

不建议编写自己的用户身份验证。要做到这一点非常困难,在大多数情况下,你可以使用Windows或点网框架已经提供的。

例如,您的应用程序不应以纯文本形式存储用户密码。如果您的应用程序或数据库遭到破坏,攻击者不仅可以完全访问您的应用软件,还可以访问用户可能在其他地方使用过的密码列表。

如果您需要存储用户凭据,则应首先对其进行加盐处理,然后使用安全的哈希算法对其进行哈希处理。这样可以防止任何访问数据库的人学习用户密码。

要验证密码,您可以在数据库中查找salt,将密码附加到其中,对结果进行散列,然后将其与存储的值进行比较。如果它们相同,则用户输入了正确的密码。

如果您正在编写将在windows域中使用的应用程序,则可以使用Active Directory组来控制对应用程序的访问。在最简单的级别上,您可以将应用程序存储在只有授权用户才能访问的文件夹中。

您还可以使用组来控制对应用程序连接到的数据库的访问。如果您使用的是SQL server,则每个组都应置于SQL数据库角色中,而该角色又被授予该角色所需的权限。

在应用程序中,您可以查找用户组成员资格,并使用它来确定要显示的表单/菜单选项,或者在未经授权的情况下退出应用程序。

如果您正在编写ASP.Net应用程序,请考虑使用框架中内置的MemberShip和Roles。