尝试创建一个受密码保护的用户程序

时间:2014-04-07 20:02:04

标签: c# sql forms login registration

我正在创建一个C#应用程序,该应用程序将允许唯一用户创建具有用户名和密码的帐户。所以只有这个用户才能访问它。现在,我将它连接到一个本地SQL数据库,其中包含一个用于登录信息的表。我有一个用户可以创建帐户的表单。它会将信息发送到表格。我有一个登录页面,它会在让用户访问main.cs之前对表进行身份验证。但是,就目前而言......打开应用程序的任何人都可以创建登录凭据并访问它。有没有办法让我可以制作应用程序,第一次启动初始帐户创建或设置后再直接打开登录页面?我正在寻找一种更好的方法来保护它。

示例:此应用将为我保留我拥有的物品的库存。但我想密码保护它。但是,我想这样做,以便启动应用程序的每个人都可以创建帐户并访问此信息。我试图让用户(我自己)可以通过表单设置密码。然后,从那时起,就可以通过该密码访问应用程序。

登录表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication2
{
public partial class LoginForm : Form
{
    public LoginForm()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\brmcbrid\Documents\UserLogin.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From Login where Username='" + userName.Text + "' and Password = '" + password.Text + "'", con);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        if (dt.Rows[0][0].ToString() == "1")
        {
            this.Hide();
            Main wipd = new Main();
            wipd.Show();
        }
        else
        {
            MessageBox.Show("Please Check your username and password and try again.");
        }
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        this.Hide();
        CreateNewAccount na = new CreateNewAccount();
        na.Show();
    }
}
}

注册表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;

namespace WindowsFormsApplication2
{
public partial class CreateNewAccount : Form
{
    public CreateNewAccount()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
        LoginForm lf = new LoginForm();
        lf.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        //instance of sqlconnection
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\brmcbrid\Documents\UserLogin.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        SqlCommand cmd = new SqlCommand("INSERT into LOGIN values('" + newUserName.Text + "','" + newPassword.Text + "','" + firstName.Text + "','" + lastName.Text + "','" + newEmail.Text + "')", con);
        con.Open();
        int i = cmd.ExecuteNonQuery();
        con.Close();
        if (i > 0)
        {
            this.Hide();
            LoginForm lf = new LoginForm();
            lf.Show();
            MessageBox.Show("New User Account added successfully!");
        }
        else
        {
            MessageBox.Show("There was a problem creating the account.  Please check the values and try again.");
        }


    }



}
}

1 个答案:

答案 0 :(得分:1)

一个好的解决方案(虽然肯定不是防篡改)是在进入帐户创建屏幕之前检查您的用户表中的任何现有记录。

我会做这样的流程:

  1. 启动/启动屏幕在用户表上运行“SELECT”查询:
  2. 检查行数是否为0
  3. 如果是,请转到注册页面
  4. 如果不是,请转到登录页面

    SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From Login", con);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    if (dt.Rows[0][0].ToString() == "0")
    {
        RegistrationForm rf = new RegistrationForm();
        rf.Show();
    }
    else
    {
        this.Hide();
        LoginForm lf = new LoginForm();
        lf.Show();
    }