2012-04-17 13 views
5

Próbuję wykonać przykład Nancy.Demo.Authentication.Forms, ale mam problemy, ponieważ wygląda na to, że przykładowy kod jest już nieaktualny. Przykro mi, jeśli to pytanie jest długie, ale nie chcę przegapić moich błędów. Więc tutaj jest to, co zrobiłem do tej pory:Nancy: FormsAuthentication - Pierwsze kroki

pomyślnie zainstalowany pakiet uwierzytelniania za pomocą konsoli menedżera pakietów (VS11 beta)

PM> install-package nancy.Authentication.Forms 
Attempting to resolve dependency 'Nancy (= 0.10.0)'. 
Successfully installed 'Nancy.Authentication.Forms 0.10.0'. 
Successfully added 'Nancy.Authentication.Forms 0.10.0' to uMentor. 

pisałem implementację IUserMapper że trwa uzależnienie od mojego sesji RavenDB dostawcą i wykorzystuje to, aby znaleźć i zweryfikować użytkownikom

public class FormsAuthenticationService : IUserMapper 
{ 
    private readonly IRavenSessionProvider _ravenSessionProvider; 

    public FormsAuthenticationService(IRavenSessionProvider ravenSessionProvider) 
    { 
     _ravenSessionProvider = ravenSessionProvider; 
    } 

    public IUserIdentity GetUserFromIdentifier(Guid identifier) 
    { 
     using (var ravenDB = _ravenSessionProvider.GetSession()) 
     { 
      var user = ravenDB.Query<User>().FirstOrDefault(u => u.FormsAuthenticationGuid == identifier); 
      return user; 
     } 
    } 

    public static Guid? ValidateUser(IDocumentSession ravenDB, string username, string password) 
    { 
     var user = ravenDB.Query<User>().FirstOrDefault(u => u.UserName == username && u.Password == password); 
     if (user == null) 
     { 
      return null; 
     } 
     return user.FormsAuthenticationGuid; 
    } 
} 

dodałem właściwość do mojej klasy użytkownika w celu zaspokojenia identyfikatora pola identyfikatora GUID wymaganej do cookie bardziej bezpieczny (mam czytać posty grumpydev i zrozumieć dlaczego th jest GUID jest potrzebne, ale jest to dobra praktyka, aby ta dziedzina nieruchomość od klasy użytkownika?)

public class User : IUserIdentity 
{ 
    public string UserName { get; set; } 
    public IEnumerable<string> Claims { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
    public Guid FormsAuthenticationGuid { get; set; } 
} 

końcu dodałem więcej konfigurację do mojego inicjującego o kradzież kodu bezpośrednio z Demo (Link powyżej). Tutaj pojawiają się problemy. Wygląda na to, że kod się zmienił.

public class MyBootstrapper : DefaultNancyBootstrapper 
{ 
    protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context) 
    { 
     base.ConfigureRequestContainer(container, context); 
     container.Register<IUserMapper, FormsAuthenticationService>(); 
    } 

    protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context) 
    { 
     var formsAuthConfiguration = 
      new FormsAuthenticationConfiguration() 
      { 
       //These properties do not exist! <<---- Edit - yes they do - see comment 
       RedirectUrl = "~/login", 
       UserMapper = requestContainer.Resolve<IUserMapper>(), 
      }; 
     //This method does not exist <<---- Edit - yes they do - see comment 
     FormsAuthentication.Enable(pipelines, formsAuthConfiguration); 
    } 

    protected override NancyInternalConfiguration InternalConfiguration 
    { 
     get { return NancyInternalConfiguration.WithOverrides(x => x.NancyModuleBuilder = typeof(RavenAwareModuleBuilder)); } 
    } 
} 

EDIT 1 Okazuje się moim błędem było głupie (nieprawidłowy using oświadczenie - patrz komentarz poniżej). Cały powyższy kod działa teraz dobrze, więc pozostawiam to pytanie na stojąco.

+0

Gotcha! OK, znalazłem problem ze złamanym kodem. Resharper użytecznie wstawił następującą instrukcję using: 'using FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'. Usunięcie tego rozwiązało zepsuty kod :-) Jednak nadal będę wdzięczny za wszelkie komentarze na temat mojej implementacji. Potrzebuję zapewnienia, że ​​jestem na dobrej drodze. Dzięki. – biofractal

+0

Moje Nancy FormsAuthentication z RavenDB teraz wszystko działa. Chociaż chodziłam po domach tylko po to, by ugryźć własny ogon, pozostawiam to pytanie w spokoju, ponieważ może to pomóc innym. – biofractal

Odpowiedz

1

Tylko w przypadku, gdy brakowało komentarz powyżej, odpowiedź była żałośnie prosty:

Mam cię! OK, znalazłem problem ze złamanym kodem. Resharper użytecznie umieścić w poniższej instrukcji using: 'using FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'. Usunięcie rozwiązało to zepsuty kod :-) Jednak nadal będę wdzięczny za wszelkie komentarze dotyczące mojej implementacji . Potrzebuję zapewnienia, że ​​jestem na dobrej ścieżce .