2012-05-16 75 views
0

在我的應用程序使用User.Identity來獲取用戶的用戶名登錄,我在想,如果我可以用它來獲取電子郵件地址和密碼信息,我希望將用戶帳戶頁面,用戶可以在那裏查看電子郵件用戶名等。並更改密碼。User.Identity用戶帳戶頁

我也有一個Web服務被稱爲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; 
    } 

感謝。

回答

0

首先,我必須警告你,你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); 

假設用戶名存儲在數據庫中,您將獲得用戶的記錄返回到數據集中。

+0

是的,我將很快進入SQL注入。我不得不像這樣改變你的代碼 - > http://pastebin.com/rKPL8yw9,但是當我在服務中調用一個用戶名時,它會返回空的xml。 – user1389384

+0

如果你在Managment Studio等東西中運行querystring,你會得到一個結果嗎? – Widor

0

如果您在asp.net應用程序中使用MembershipUser類,那麼您可以檢查這個link

這是一段代碼。

public void Page_Load(object sender, EventArgs args) 
{ 
    u = Membership.GetUser(User.Identity.Name); 

    if (!IsPostBack) 
    { 
    EmailTextBox.Text = u.Email; 
    } 
}