如何在登录点击时验证现有帐户

时间:2015-01-31 07:53:11

标签: c# asp.net

我目前有一个登录表单,单击登录按钮会调用以下方法:

protected void btnLogin_Click(object sender, EventArgs e)
    {
        AccountBLL accBLL = new AccountBLL();

        string username = tbUsername.Text;
        string password = accBLL.getAccount(username).Password;

        if (tbPassword.Text == password)
        {
            // Authenticate user
            string role = accBLL.getAccount(username).Role;

            // Create Form Authentication Ticket
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(60), false, role);

            // Encrypt the ticket
            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

            // Create cookie
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

            // Add cookie to outgoing cookie collection
            Response.Cookies.Add(authCookie);

            // Redirect to the URL
            if (role == "admin")
                Response.Redirect("AdminHome.aspx");
            else if (role == "user")
                Response.Redirect("UserHome.aspx");
            else
                lblMsg.Text = "Invalid login!";
        }
        else
        {
            lblMsg.Text = "Invalid password.";
        }

        //string accountID = (Session["AccountID"]).ToString();
    }

但是,如果帐户不存在/尚未创建,我将在string password = accBLL.getAccount(username).Password;上收到空指针错误,因为传递给getAccount()方法的用户名不存在。所以我的问题是,我应该如何编辑代码来实现某种验证,如果用户标识传入以检索密码的事件不存在,则会向用户显示错误消息?

3 个答案:

答案 0 :(得分:3)

嗯,您已经自己说过,当提供的用户名不存在时,getAccount方法返回null。如果我是你,我会检查accBLL.getAccount(username)是否返回null。如果是这样,我不会执行其余的代码,而是显示一个标签,其中包含一条消息,告知用户输入的用户名不存在。

首先检查用户名是否存在,如果存在,则检查密码是否正确。

我希望这会有所帮助。

答案 1 :(得分:2)

更改这些行 <击>

<击>
string password = accBLL.getAccount(username).Password;
if (tbPassword.Text == password)

<击> 对此。

var account == accBLL.getAccount(username);
if (account != null && tbPassword.Text == account.Password)

答案 2 :(得分:0)

在GetAccount方法中

比较null 喜欢 填补dt 并比较dt

if (dt.rows.count==0)
{
return null;
}
如果尚未创建帐户,

将返回空值。     然后你的登录按钮点击事件将如下所示。

 protected void btnLogin_Click(object sender, EventArgs e)
        {
            AccountBLL accBLL = new AccountBLL();

            string username = tbUsername.Text;
            string password = accBLL.getAccount(username).Password;
            if(password != null)
    {
            if (tbPassword.Text == password)
            {
                // Authenticate user
                string role = accBLL.getAccount(username).Role;

                // Create Form Authentication Ticket
              ..... your remaining code including else

    }
    else 
    {
    lblMsg.Text = "Account Doesnt Exist";
    }