【问题标题】:Membership rest and chang password in asp.net在 asp.net 中的会员休息和更改密码
【发布时间】:2012-12-14 15:54:38
【问题描述】:

我想手动更改密码并将密码发送给我的用户,但我得到“对象引用未设置为对象的实例”。错误。我的鳕鱼有什么问题: 谢谢:

        Random r = new Random();
        string code = r.Next(100000, 9999999).ToString();

        //////////////////////////////////////////////////////////////////////////////////////////////

        string connStr = ConfigurationManager.ConnectionStrings["****"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(connStr);
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd = new SqlCommand("SELECT Count(ID) FROM RolInfo where username=@username", sqlconn);
        sqlcmd.Parameters.AddWithValue("@username", TextBox1.Text);

        sqlconn.Open();
        int count = ((int)sqlcmd.ExecuteScalar());


        sqlconn.Close();


        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (count != 0)
        {

          Sendmail();

            MembershipUser u = Membership.GetUser();
            u.ChangePassword(u.ResetPassword(), code);
        }
        else
        {
            lab_Message.Visible = true;
            lab_Message.Text = "This username is invalid.";
            lab_Message.ForeColor = System.Drawing.Color.Red;

        }

    }
    else
    {
        lab_Message.Visible = true;
        lab_Message.Text = "Please enter your username.";
        lab_Message.ForeColor = System.Drawing.Color.Red;
    }
    }

【问题讨论】:

  • 您可以发布其余的代码吗?...您当前的问题中没有 GridView 或对任何 GridView 的调用。
  • @Darren:这里没有gridview!!!我从文本框中得到了用户名。
  • 那么为什么在你的问题中“对象引用未设置为对象的实例。到网格视图的 idx”
  • @Darren:谢谢你提到这一点。这是为了我的会员资格。当对象 u 来自会员用户时,它为空。为什么会这样?

标签: asp.net asp.net-membership password-recovery change-password


【解决方案1】:

您没有将参数传递给Membership.GetUser();

Membership.GetUser(); 获取当前登录的用户。由于您尚未登录,它将返回null。如果您已登录,它只会返回您,而不是您的成员。

如果你想获得用户,那么你需要传入他们的username。像这样:

MembershipUser u = Membership.GetUser(TextBox1.Text);

更新

您无需调用 SQL 数据库来检查用户是否存在。

你可以这样做。

   MembershipUser u = Membership.GetUser(TextBox1.Text);

   if (u != null){
      SendMail();
      u.ChangePassword(u.ResetPassword(), code);
   }else{
      lab_Message.Visible = true;
      lab_Message.Text = "This username is invalid.";
      lab_Message.ForeColor = System.Drawing.Color.Red;
   }

顺便说一句,用户密码不会设置为code - 这将设置为用户对其安全问题的回答。 ResetPassword 将密码重置为自动生成的密码。

有关文档,请参见此处。 http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.resetpassword.aspx

【讨论】:

  • 感谢您的回答。从sql中说用户名是什么意思?如果输入的用户名正确,则它存在于 sql 中。有没有更好的修改密码的方法?
  • 编辑了我的答案。您需要传递要更改密码的用户的“USERNAME”。给我2分钟。我会再做一次修改。
猜你喜欢
  • 2011-06-28
  • 2011-11-10
  • 2011-04-15
  • 2011-02-10
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多