【发布时间】:2014-11-16 23:05:37
【问题描述】:
有一个小错误,看在我的份上,我不知道为什么:
错误 1 当前上下文中不存在名称'email' C:\Users\Janco\Desktop\New folder\Espresso Studio's C\Espresso Studio's C\Espresso Studio's C\Form1.cs 135 69 Espresso Studio's C
错误位于:
public string HashPass(string password)
{
SHA256 sha = new SHA256CryptoServiceProvider();
//compute hash from the bytes of text
sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(password + email)); // Error occurs here at email.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Net;
using System.Net.Mail;
using System.Security.Cryptography;
namespace Espresso_Studio_s_C
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void tabPage2_Click(object sender, EventArgs e)
{
}
private void loginsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.loginsBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.loginsDataSet);
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'loginsDataSet.Logins' table. You can move, or remove it, as needed.
this.loginsTableAdapter.Fill(this.loginsDataSet.Logins);
}
private void registerButton_Click(object sender, EventArgs e)
{
AddUser(registerUserName.Text, registerPassword.Text, registerConfirmPassword.Text, registerEmail.Text);
}
private void AddUser(string username, string password, string confirmPass, string email)
{
//Local variables to hold values
string smtpEmail = smtpUserNameTextBox.Text;
string smtpPassword = smtpPasswordTextBox.Text;
int smtpPort = (int)smtpPortNumericUD.Value;
string smtpAddress = smtpAddressTextBox.Text;
//Regex for making sure Email is valid
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
//Loop through Logins Table
foreach (DataRow row in loginsDataSet.Logins)
{
//And look for matching usernames
if (row.ItemArray[0].Equals(username))
{
//If one is found, show message:
MessageBox.Show("Username already exists");
return;
}
}
//Confirm pass must equal password.
if (password != confirmPass)
{
MessageBox.Show("Passwords do not match");
}
//Password must be at least 8 characters long
else if (password.Length < 8)
{
MessageBox.Show("Password must be at least 8 characters long");
}
//If email is NOT valid
else if (!match.Success)
{
MessageBox.Show("Invalid Email");
}
//If there is no username
else if (username == null)
{
MessageBox.Show("Must have Username");
}
//If all is well, create the new user!
else
{
loginsDataSet.LoginsRow newUserRow = loginsDataSet.Logins.NewLoginsRow();
string EncryptedPass = HashPass(password);
newUserRow.Username = username;
newUserRow.Password = EncryptedPass;
newUserRow.Email = email;
loginsDataSet.Logins.Rows.Add(newUserRow);
registerUserName.Text = String.Empty;
registerPassword.Text = String.Empty;
registerConfirmPassword.Text = String.Empty;
registerEmail.Text = String.Empty;
MessageBox.Show("Thank you for Registering!");
if (String.IsNullOrWhiteSpace(smtpEmail) || String.IsNullOrWhiteSpace(smtpPassword) || String.IsNullOrWhiteSpace(smtpAddress) || smtpPort <= 0)
{
MessageBox.Show("Email configuration is not set up correctly! \nCannot sent email!");
}
else
{
SendMessage(email.ToString(), username.ToString(), password.ToString());
}
}
}
public string HashPass(string password)
{
SHA256 sha = new SHA256CryptoServiceProvider();
//compute hash from the bytes of text
sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(password + email)); // Error occurs here
//get hash result after compute it
byte[] result = sha.Hash;
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
//change it into 2 hexadecimal digits
//for each byte
strBuilder.Append(result[i].ToString("x2"));
}
return strBuilder.ToString();
}
public void SendMessage(string ToAddress, string ToName, string password)
{
var client = new SmtpClient(smtpAddressTextBox.Text, (int)smtpPortNumericUD.Value)
{
Credentials = new NetworkCredential(smtpUserNameTextBox.Text, smtpPasswordTextBox.Text),
EnableSsl = true
};
client.Send(smtpUserNameTextBox.Text, ToAddress, "Thank You!", "Thank you for registering with us today! \n Your username/passwords are: \n \nUsername: "
+ ToName.ToString() + "\nPassword: " + password.ToString());
}
private void loginButton_Click(object sender, EventArgs e)
{
//Locals to hold values
string username = loginUserName.Text;
string password = HashPass(loginPassword.Text);
//Loop through database
foreach (DataRow row in loginsDataSet.Logins)
{
//And search for Username and Pass that match
if (row.ItemArray[0].Equals(username) && row.ItemArray[1].Equals(password))
{
loginUserName.Text = String.Empty;
loginPassword.Text = String.Empty;
MessageBox.Show("Login Success");
break;
}
//If not, then show this message.
else
{
MessageBox.Show("Username/Password incorrect");
break;
}
}
}
}
}
【问题讨论】:
-
你是如何暴露 email 变量的。它是另一个方法范围的本地变量吗?看起来你不是在通过电子邮件或
ref email -
使用调试器并单步执行代码,您将看到电子邮件在哪里具有
""或string.Empty值 -
@DJKRAZE 我刚刚这样做了,但找不到任何东西。
-
您熟悉术语“全局变量”、“局部变量”、“公共”、“静态”、“受保护”等。现在来吧,我之前的评论为您提供了所有您需要的提示。尝试分配/存储本地方法之外的电子邮件值更好..创建一个属性并以这种方式访问/分配它..
-
是的,我熟悉这些术语。我正在学习编程atm。 OI 发现了问题。现在是凌晨 3 点,我想我只是累了。这就是为什么我错过了一些东西。必须这样做
string email; private void AddUser(string username, string password, string confirmPass, string email)
标签: c# login scope registration