我正在创建一个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.");
}
}
}
}
答案 0 :(得分:1)
一个好的解决方案(虽然肯定不是防篡改)是在进入帐户创建屏幕之前检查您的用户表中的任何现有记录。
我会做这样的流程:
如果不是,请转到登录页面
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();
}