【问题标题】:Small error I can't figure out小错误我想不通
【发布时间】: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


【解决方案1】:

AddUser 方法接收变量 email。这是一个参数,因此它是一个仅在 AddUser 方法内可见的局部变量。除非您将变量作为参数传递或将其分配给全局变量(不推荐),否则没有其他方法可以看到或使用它

 private void AddUser(string username, string password, string confirmPass, string email)

所以你需要将该变量传递给 HashPass 方法

.... in AddUser .....
else
{
    loginsDataSet.LoginsRow newUserRow = loginsDataSet.Logins.NewLoginsRow();
    string EncryptedPass = HashPass(password, email);
    ....
} 
...

public string HashPass(string password, string anEmailAddress)
{
    SHA256 sha = new SHA256CryptoServiceProvider();

    //compute hash from the bytes of text
    sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(password + anEmailAddress));  

    ....
}

【讨论】:

  • 谢谢史蒂夫。我试过了,但后来我得到了这个错误。方法 'HashPass' 没有重载需要 1 个参数。
  • 您是否在 AddUser 方法内对 HashPass 的调用中传递了第二个参数 email?
  • 是的,我做到了。我也完全按照你今天早些时候所说的做了,但我没有运气,所以我决定在这里发布原始错误。
  • 我们怎么知道你确实这样做了..你能发布代码并显示你传递的内容以及调用的内容吗..
  • @JancovanHeerden 您不仅在AddUser 中使用HashPass 方法,而且至少在loginButton_Click 中也是如此。查找所有用法并相应地更改它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多