2012-04-17 9 views
5

Ich versuche, das Nancy.Demo.Authentication.Forms Beispiel zu folgen, aber ich habe Probleme, da es so aussieht, als ob der Beispielcode nicht mehr aktuell ist. Es tut mir leid, wenn diese Frage lang ist, aber ich möchte meine Fehler nicht verpassen. Also hier ist, was ich bisher getan haben:Nancy: FormsAuthentication - Erste Schritte

ich erfolgreich das Authentifizierungspaket über den Paketmanager Konsole (VS11 beta) installiert

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. 

ich eine Implementierung von IUserMapper schrieb, die eine Abhängigkeit von meiner RavenDB Sitzung dauert und Anbieter verwendet, das finden und zu validieren Benutzern

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; 
    } 
} 

ich habe eine Eigenschaft meine Benutzerklasse hinzugefügt für das Guid Kennungsfeld gerecht zu werden benötigt, um das Cookie sicherer zu machen (ich habe grumpydev Beiträge lesen und verstehen, warum th ist Guid ist notwendig, aber ist es gute Praxis, das ein Eigenschaftsfeld auf der Benutzerklasse zu machen?)

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; } 
} 

Endlich habe ich durch Stehlen den Code direkt aus dem Demo (Link oben mehr Setup mein Bootstrap-Programm hinzugefügt). Hier bekomme ich Probleme. Der Code scheint sich geändert zu haben.

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 Es stellt sich heraus, mein Fehler dumm war (eine falsche using Anweisung - siehe Kommentar unten). Der obige Code funktioniert jetzt gut und ich werde diese Frage stehen lassen.

+0

Gotcha! OK, ich habe das Problem mit dem kaputten Code gefunden. Resharper fügt hilfreich folgende Anweisung ein: 'using FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'. Durch das Entfernen löste sich der kaputte Code :-) Trotzdem würde ich noch Kommentare zu meiner Implementierung begrüßen. Ich brauche die Gewissheit, dass ich auf dem richtigen Weg bin. Vielen Dank. – biofractal

+0

Meine Nancy FormsAuthentication mit RavenDB funktioniert jetzt alles. Obwohl ich um die Häuser herumging, nur damit ich meinen eigenen Schwanz beißen konnte, werde ich diese Frage stehen lassen, weil sie anderen helfen könnte. – biofractal

Antwort

1

Gerade falls Sie den Kommentar oben verpasst haben, war die Antwort rührend einfach:

Gotcha! OK, ich habe das Problem mit dem kaputten Code gefunden. Resharper hilfreich in die using-Anweisung einfügen: 'using FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'. Entfernen löste das den kaputten Code :-) Jedoch würde ich noch irgendwelche Kommentare über meine Implementierung begrüßen. Ich brauche die Gewissheit, dass ich auf dem richtigen Weg bin.