2012-12-21 78 views
2

我有一個在localhost:8080上設置的RavenDB服務實例,並且使用OAuth插件來存儲簡單的用戶文檔進行身份驗證。我使用的是id和用戶電子郵件的名稱。以下代碼正常運行以存儲用戶RavenDB服務Session.Query不返回結果

public AccountUserDocument CreateUser(RegisterModel model) 
{ 
    using (IDocumentSession session = DataDocumentStore.Instance.OpenSession()) 
    { 
     Guid userId = Guid.NewGuid(); 

     session.Store(new AccountUserDocument 
      { 
       Name = model.Email, 
       Id = String.Format("Raven/Users/{0}", userId), 
       AllowedDatabases = new[] { "*" }, 

       Email = model.Email, 
       FirstName = model.FirstName, 
       LastName = model.LastName, 
       FacebookId = 0, 
       Expires = DateTime.Now.AddMonths(1), 
       AccessToken = string.Empty 

      }.SetPassword(model.Password)); 

     session.SaveChanges(); 

     return session.Load<AccountUserDocument> 
         (String.Format("Raven/Users/{0}", userId)); 
    } 
} 

並返回一個有效的用戶對象。然而,當我打電話

return session.Query<AccountUserDocument>() 
       .Customize(x => x.WaitForNonStaleResults()) 
       .Where(x => x.Name == email) 
       .SingleOrDefault(); 

我什麼也沒得到。它一週前一直在工作,但現在它沒有。如果我打開RavenDB工作室,我可以看到用戶和名稱正是我如何進入它(我甚至複製並粘貼到文本字段)。

enter image description here

我曾嘗試停止和重新啓動服務希望能解決這個問題,但事實並非如此。

我想知道如果有人能指出我如何調試這裏發生的事情。完整的代碼庫可以在這裏

https://github.com/jamesamuir/MVC_Facebook_Auth

發現,如果有人傾向於下載。

在此先感謝。

+1

在您提供的鏈接中找不到任何相關的代碼。錯誤的鏈接?或者你的回購沒有更新?我沒有看到任何錯誤,除非要小心,不要在生產中調用'WaitForNonStaleResults()'。另外,通過在同一個會話中調用'.Load()',你並不真正從服務器獲取它。它會緩存在會話中。 –

+0

因此,在挖掘了一下後,我發現我可以將一個簡單的文檔保存到服務中並查詢它。但是,當我使用Authentication Bundle時,它似乎在我按名稱查詢時返回null。我創建了一個簡單的項目來演示這種行爲。它可以在https://github.com/jamesamuir/RavenConnTest.git 找到我使用的服務器的992構建 和1.0.960的客戶端和身份驗證包,通過nuget安裝 – jamesamuir

回答

1

嗯,我發現你提供的代碼示例有很多錯誤 - 例如客戶端和服務器版本不匹配。另外,Authentication Bundle是一個1.0版本的功能,它在2.0中已經被棄用,幾乎是最終版本,所以您正在編寫代碼,您最終必須替換它。

但是要回答你的問題,你不能從你的查詢中得到結果的具體原因是你選擇使用以「Raven /」開頭的文檔密鑰,這是RavenDB系統文檔的約定,沒有索引。

如果您從您的ID中刪除「Raven /」,它將起作用。

此外,你不應該使用.WaitForNonStaleResults() - 這僅用於單元測試,並且在生產中是危險的。如果您真的覺得您需要等待,請使用.WaitForNonStaleResultsAsOfNow() - 這樣更安全是因爲它提供了一個臨界值。

+0

感謝您的快速回復!我正在使用一個認證包教程http://mytechworld.officeacuity.com/index.php/2012/07/authentication-and-authorization-in-mvc-projects-using-ravendb/ 這似乎對我和我試着調整了一下。 .WaitForNonStaleResults()作爲測試來確保我在查詢時正在處理最新的文檔集。 但是,我想知道,如果你可以提供我關於認證包的棄用的鏈接,因爲我似乎無法找到任何文章陳述此類。再次感謝。 – jamesamuir

+1

還沒有很多文件記錄。我[請求](http://issues.hibernatingrhinos.com/issue/RDoc-81)他們添加了更好的身份驗證選項的文檔。它在[9月27日](https://github.com/ayende/ravendb/commit/70933e047cba50b560098b3b3d341a902cf0ed0e)和[api鍵](https://groups.google.com/group/ravendb/browse_thread/thread/d87a67d0b1a516c )大約在同一時間宣佈。您可能想從[Raven.Contrib](https://github.com/ravendb/ravendb.contrib)查看Asp.Net身份驗證提供程序,但它剛剛添加並且尚未完整記錄。 –

+0

再次感謝,我非常感謝後續。 – jamesamuir