【问题标题】:Storing user credentials for next program startup为下次程序启动存储用户凭据
【发布时间】:2014-06-26 22:29:24
【问题描述】:

这里有问题。我有一个程序,当它启动时会弹出一个 loginForm 对话框。现在在这个 loginForm 上,我添加了一个 rememberMe (onthoudMij) 按钮。因此,如果用户选择此框登录,关闭程序然后再次打开它,他的用户凭据将已被填写。

这是我的 loginButton 代码。

private void loginButton_Click(object sender, EventArgs e)
{
    try
    {
        var sr = new System.IO.StreamReader("C:\\" + inlogNaamTextbox.Text + "\\Login.txt");
        gebruikersnaam = sr.ReadLine();
        passwoord = sr.ReadLine();
        sr.Close();

        if (gebruikersnaam == inlogNaamTextbox.Text && passwoord == inlogPasswoordTextbox.Text)
        {
            classUsername.name = inlogNaamTextbox.Text;

            MessageBox.Show("Je bent nu ingelogd!", "Succes!");
            this.Dispose();
        }
        else
        {
            MessageBox.Show("Gebruikersnaam of wachtwoord fout!", "Fout!");
        }
    }
    catch (System.IO.DirectoryNotFoundException ex)
    {
        MessageBox.Show("De gebruiker bestaat niet!", "Fout!");
    }
}

现在我的问题是:

我已经在网上搜索了关于记住我实现的选项,但它们总是使用 SQL 数据库等。我只有一个登录名,将用户名和密码存储在一个 txt 文件中,正如你在代码中看到的那样。

问题是……

所以我的问题不是;我怎样才能实现这个记住我复选框?我已经知道我应该使用 System.Net ,但是如果没有 sql 数据库或类似的东西,还有什么方法可以工作?

【问题讨论】:

  • 您当前的代码有什么问题?在我看来,这个问题与您的代码完全无关。
  • 否,当前的代码很好,可以完美运行。我只是想说明我不使用任何 sql 数据库来存储我的登录详细信息。我只是将它们写入txt文件。我现在想知道如何在登录表单上实现一个记住我的复选框。我的表单上已经有复选框,但它还没有代码,因为我不知道该怎么做。

标签: c# login remember-me


【解决方案1】:

如果您的问题是保存部分,您可以使用 3DES 加密之类的方法来获得某种保存解决方案来保存用户名和密码。

您可以使用您当前的代码并在此 SO 文章中添加类似内容来加密和解密密码:How to implement Triple DES in C# (complete example)

如果问题只是如何读取/保存这个?

我会创建一个文本,如下所示:

private void CallOnFormLoad()
{
    string[] allLines = File.ReadAllLines(@"C:\passwordfile.txt");

    if (allLines.Length > 1)
    {
        // at least one 2 lines:
        inlogNaamTextbox.Text = allLines[0];
        inlogPasswoordTextbox.Text = allLines[1];
    }
}

private void loginButton_Click(object sender, EventArgs e)
{
    try
    {
        var sr = new System.IO.StreamReader("C:\\" + inlogNaamTextbox.Text + "\\Login.txt");
        gebruikersnaam = sr.ReadLine();
        passwoord = sr.ReadLine();
        sr.Close();

        if (gebruikersnaam == inlogNaamTextbox.Text && passwoord == inlogPasswoordTextbox.Text)
        {
            classUsername.name = inlogNaamTextbox.Text;

            MessageBox.Show("Je bent nu ingelogd!", "Succes!");

            File.WriteAllLines(@"C:\passwordfile.txt", string.Format("{0}\n{1}", inlogNaamTextbox.Text, inlogPasswoordTextbox.Text))

            // Don't call Dispose!
            // this.Dispose();
        }
        else
        {
            MessageBox.Show("Gebruikersnaam of wachtwoord fout!", "Fout!");
        }
    }
    catch (System.IO.DirectoryNotFoundException ex)
    {
        MessageBox.Show("De gebruiker bestaat niet!", "Fout!");
    }
}

【讨论】:

  • 我不需要加密密码。这只是一个每个人都可以看到用户凭据的项目。所以安全无所谓。我只想在下次程序从同一台 PC 启动时记住用户凭据。所以我猜代码会以 if (checkbox = checked) ... 类似的东西开始
  • @RawMeat:查看更新。在表单的构造函数中调用方法CallOnFormLoad
  • 该死的,我以为它有效,但现在它不再有效了。我的视觉工作室说名称“文件”不存在。我应该在什么文件或名称中更改它?提前致谢
  • @RawMeat:您是否创建了文件 passwordfile.txt?也许您需要将其更改为可以写入的位置。
  • 不,但我的意思是给出的错误是“文件”.WriteAllLines(所以那个word文件)不存在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多