2016-11-07 39 views
1

我需要對某些模塊進行表單身份驗證,對其他模塊進行無狀態身份驗證。使用表單身份驗證,登錄頁面需要設置returnUrl每個模塊使用returnUrl進行身份驗證

我們使用了應用程序範圍的表單身份驗證(爲管道啓用),但我們一直試圖啓用混合身份驗證。

https://github.com/NancyFx/Nancy/issues/2439我們必須能夠在模塊構造窗體身份驗證:

public abstract class FormsAuthenticationModuleBase : NancyModule 
{ 
    protected FormsAuthenticationModuleBase(IUserMapper userMapper) 
     : this(userMapper, string.Empty) 
    { 
    } 

    protected FormsAuthenticationModuleBase(IUserMapper userMapper, string modulePath) 
     : base(modulePath) 
    { 
     var formsAuthConfiguration = new FormsAuthenticationConfiguration 
     { 
      RequiresSSL = false, 
      UserMapper = userMapper, 
      RedirectUrl = "/login?returnUrl=" + Context.Request.Headers["X-Original-URL"].FirstOrDefault() 
     }; 

     // Enable calls RequiresAuthentication. 
     FormsAuthentication.Enable(this, formsAuthConfiguration); 
    } 
} 

問題是Contextnull在施工時間。

我們如何在每個模塊上啓用表單身份驗證並設置包含returnUrlRedirectUrl

(參見https://github.com/NancyFx/Nancy/wiki/Forms-authentication

更新

@khellang我嘗試添加一個before hook建議:

Before.AddItemToStartOfPipeline(
    ctx => 
    { 
     if (!formsAuthConfiguration.RedirectUrl.Contains("?")) 
     { 
      formsAuthConfiguration.RedirectUrl += 
       "?returnUrl=" + ctx.Request.Headers["X-Original-URL"].FirstOrDefault(); 
     } 

     return null; 
    }); 

(與原來的RedirectUrl = "/login"

此結果在405我不能調試到。 (Before +=語法也是如此。)

他還建議將所有內容都移入鉤子,而不是存儲配置並對其進行變異;那也沒用。

目前我使用if/else logic in RequestStartup(與上述方法相反)。這樣可行。

回答