2012-04-17 77 views
5

我想要遵循Nancy.Demo.Authentication.Forms的例子,但我遇到了問題,因爲它看起來像示例代碼現在已過時。如果這個問題很長,我很抱歉,但我不想錯過我的錯誤。所以這是我迄今所做的:南希:FormsAuthentication - 入門

我順利地通過包管理器控制檯安裝身份驗證包(VS11測試版)

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. 

我寫IUserMapper的實現,它發生在我的RavenDB會議的依賴提供者和利用,要找到和驗證用戶

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

我添加了一個屬性,我的User類,以滿足使餅乾更安全所需要的GUID標識符字段(我已閱讀grumpydev帖子和理解爲什麼日是GUID是需要的,但它是很好的做法,使這對用戶類的屬性場?)

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

最後,我已經通過直接竊取代碼出演示的加入更多的設置,以我的引導程序(以上鍊接)。這是我遇到問題的地方。代碼似乎已經改變。

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

編輯1 事實證明我的錯誤是愚蠢的(不正確的using聲明 - 見下面的評論)。上面的所有代碼現在都可以正常工作,所以我會留下這個問題。

+0

哎呀!好的,我發現問題與破損的代碼。 Resharper有用地使用了以下使用語句:'使用FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'。刪除這個解決了破碎的代碼:-)然而,我仍然歡迎任何關於我的實施的意見。我需要保證我走在正確的道路上。謝謝。 – biofractal 2012-04-17 11:07:12

+0

我的南希FormsAuthentication與RavenDB現在所有的作品。儘管我繞着房子繞過自己的尾巴,但我會留下這個問題,因爲它可能會幫助別人。 – biofractal 2012-04-19 08:22:48

回答

1

萬一你錯過了上述評論,答案很簡單得可憐:

疑難雜症!好的,我發現問題與破損的代碼。 Resharper 有用地使用了以下使用語句:'使用 FormsAuthenticationConfiguration = System.Web.Configuration.FormsAuthenticationConfiguration;'。刪除 這解決了破碎的代碼:-)但是,我仍然歡迎任何關於我的實施的 評論。我需要保證我在 正確的道路上。