【问题标题】:User.Identity for user account page用户帐户页面的 User.Identity
【发布时间】:2012-05-16 14:59:55
【问题描述】:

在我的应用程序中,我使用User.Identity 来获取登录用户的用户名,我想知道是否可以使用它来获取电子邮件和密码信息,因为我想要一个用户帐户页面,用户可以在其中查看电子邮件用户名等等......并更改他们的密码。

我还有一个名为 getusers 的网络服务,它从我的数据库中的用户表中获取所有信息,但是我不确定如何从中获取帐户信息如果我这样做,则登录用户的数据库。

到目前为止,我有这个:

protected void Page_Load(object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        username.Text = User.Identity.Name;
    }

    localhost.Service1 myws = new localhost.Service1();
    ds = myws.GetUsers();

}

这很好,因为我得到了用户名,但我需要其余的。

哦,这里是 Web 服务 GetUsers:

[WebMethod]
    public DataSet GetUsers()
    {
        DataSet ds = new DataSet();
        string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/dvd_forum.accdb;Persist Security Info=True";
        string queryStr = "select * from Users";
        OleDbConnection myConn = new OleDbConnection(database);
        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(queryStr, myConn);
        myConn.Open();
        myDataAdapter.Fill(ds, "Users");
        myConn.Close();
        return ds;
    }

谢谢。

【问题讨论】:

    标签: c# asp.net user-identification


    【解决方案1】:

    如果您在您的 asp.net 应用程序中使用 MembershipUser 类,那么您可以检查这个link

    这是一个sn-p的代码。

    public void Page_Load(object sender, EventArgs args)
    {
      u = Membership.GetUser(User.Identity.Name);
    
      if (!IsPostBack)
      {
        EmailTextBox.Text = u.Email; 
      }
    }
    

    【讨论】:

      【解决方案2】:

      首先,我必须警告您,您的GetUsers() 方法对 SQL 注入开放。不说了……

      如果您稍微修改 GetUsers() 方法以接受参数并将搜索范围缩小到唯一用户,您可以:

      [WebMethod] 
      public DataSet GetUser(string UserName) 
      { 
          DataSet ds = new DataSet(); 
          string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/dvd_forum.accdb;Persist Security Info=True"; 
          string queryStr = "select * from Users WHERE UserName=" + UserName; 
          OleDbConnection myConn = new OleDbConnection(database); 
          OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(queryStr, myConn); 
          myConn.Open(); 
          myDataAdapter.Fill(ds, "Users"); 
          myConn.Close(); 
          return ds; 
      } 
      

      现在你需要做的就是调用

      GetUser(User.Identity.Name);
      

      假设用户名存储在数据库中,您将在数据集中返回您的用户记录。

      【讨论】:

      • 是的,我很快就会进行 SQL 注入。我不得不像这样更改您的代码 -> pastebin.com/rKPL8yw9 但是当我在服务中调用用户名时,它返回空 xml。
      • 如果你在像 Managment Studio 这样的地方运行查询字符串,你会得到结果吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多