2015-12-30 149 views
0

我在這裏需要一些幫助,我試圖在用戶登錄後識別用戶。我的代碼除了where子句外工作正常。 你如何識別一個用戶,我基本上試圖說,在哪裏UserName == loginName給我的完整記錄。 然後從記錄我可以拉出GarageID,任何幫助或指針非常讚賞。身份登錄後的用戶.net 4.5

private void FindGarageID() 
    { 
     System.Security.Principal.WindowsIdentity identity = Context.Request.LogonUserIdentity; 

     string loginName = identity.Name; 

     using (tyrescannerdatabaseEntities dbcontext = new tyrescannerdatabaseEntities()) 
     { 

      garage = (from r in dbcontext.AspNetUsers 

          where r.UserName == loginName 

          select r).FirstOrDefault(); 

      if (!garage.GarageID.Equals(null)) 
      { 
       garageID = (int)garage.GarageID; 
      } 
      else 
      { 
       garageID = 1; 
      } 
     } 
+0

所以多一點的信息會很好。如果您使用身份證明,我認爲這是一個內部網站? – Nate

+0

呃沒有它的網站,我使用錯誤的代碼? – Tom

+0

當您使用活動目錄驗證您的用戶時使用WindowsIdentity。如果這是一個公共網站,那麼當用戶登錄時,將用戶名放在會話中,然後在查詢中使用它。 – Nate

回答

0

所以這裏是我將如何做到這一點。我會創建一個名爲Session的靜態類。這只是爲我封裝了會話變量的訪問。

public static class Session 
{ 
     public static string UserName 
     { 
      get { return (JsonWhereClause)HttpContext.Current.Session["UserName"]; } 
      set { HttpContext.Current.Session["UserName"] = value; } 
     } 

} 

然後,當用戶登錄時,我會這樣做。

Session.UserName = ""//User inputed username 

這會讓你的代碼變成這樣。

private void FindGarageID() 
{ 
    string loginName = Session.UserName; 

    using (tyrescannerdatabaseEntities dbcontext = new tyrescannerdatabaseEntities()) 
    { 

     garage = (from r in dbcontext.AspNetUsers 

         where r.UserName == loginName 

         select r).FirstOrDefault(); 

     if (!garage.GarageID.Equals(null)) 
     { 
      garageID = (int)garage.GarageID; 
     } 
     else 
     { 
      garageID = 1; 
     } 
    } 

請注意,會話將僅在Web服務器上可用,因此如果您有服務,則需要將用戶名傳遞給服務。