2012-12-21 2 views
2

localhost : 8080에 RavenDB 서비스 인스턴스가 설정되어 있으며 OAuth 플러그인을 사용하여 인증을위한 간단한 사용자 문서를 저장하고 있습니다. ID와 사용자 이메일에 대해 GUID를 사용하고 있습니다. 다음 코드는 사용자를 적절히 저장하는 데 적합합니다.RavenDB 서비스 세션. 결과가 반환되지 않는 쿼리

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(); 

나는 아무것도 얻지 못한다. 1 주일 전에 일 했었지만 지금은 그렇지 않습니다. RavenDB studio를 열면 사용자와 이름이 정확히 어떻게 입력되어 있는지 볼 수 있습니다 (텍스트 필드에 복사하여 붙여 넣기도했습니다).

enter image description here

나는 중지하고 그래도 문제가 해결되기를 바랬 서비스를 다시 시작 시도했지만 그렇지 않았다.

누군가 내가 여기에서 벌어지고있는 일을 어떻게 디버깅할지 지시 할 수 있는지 궁금합니다. 누군가가 그것을 다운로드하는 경향이 경우 전체 코드 저장소는 여기

https://github.com/jamesamuir/MVC_Facebook_Auth

찾을 수 있습니다.

미리 감사드립니다.

+1

제공하신 링크에서 관련 코드를 찾을 수 없습니다. 잘못된 링크? 또는 Repo가 업데이트되지 않았습니까? 프로덕션에서'WaitForNonStaleResults()'를 호출하지 않도록 조심하는 것을 제외하고는 즉시 아무 것도 보이지 않습니다. 또한 같은 세션에서'.Load()'를 호출하면 서버에서 실제로 얻지 못한다. 세션에 캐시됩니다. –

+0

그래서 조금 파고 나면 간단한 문서를 서비스에 저장하고 잘 쿼리 할 수 ​​있다는 것을 알게되었습니다. 그러나 인증 번들을 사용하면 이름으로 쿼리 할 때 null이 반환되는 것 같습니다. 이 동작을 보여주기위한 간단한 프로젝트를 만들었습니다. https://github.com/jamesamuir/RavenConnTest.git에서 찾을 수 있습니다 서버의 992 빌드 및 클라이언트 및 인증 번들 1.0.960을 사용하고 있습니다. 누메를 통해 설치된 – jamesamuir

답변

1

글쎄, 클라이언트와 서버가 일치하지 않는 버전과 같이 제공 한 코드 샘플에 잘못된 점이 많습니다. 또한 인증 번들은 2.0에서 거의 사용되지 않는 1.0 기능 이었으므로 결국 대체해야 할 코드를 작성하게됩니다.

질문에 대답하기 위해 쿼리 결과를 얻을 수없는 구체적인 이유는 RavenDB 시스템 문서의 규칙 인 "Raven /"으로 시작하는 문서 키를 사용하기로 선택한 것입니다. 색인이 생성되지 않습니다.

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) 인증 옵션에 대한 더 나은 문서를 추가합니다. [september 27] (https://github.com/ayende/ravendb/commit/70933e047cba50b560098b3b3d341a902cf0ed0e) 및 [api keys] (https://groups.google.com/group/ravendb/browse_thread/thread/d87a67d0b1a516c)에서 삭제되었습니다.)는 같은시기에 발표되었습니다. [Raven.Contrib] (https://github.com/ravendb/ravendb.contrib)의 Asp.Net 인증 공급자를 보길 원할 수도 있지만, 최근에 추가되었으며 아직 잘 문서화되어 있지 않습니다. –

+0

다시 한 번 감사드립니다. 후속 조치에 정말 감사드립니다. – jamesamuir

관련 문제