我需要對某些模塊進行表單身份驗證,對其他模塊進行無狀態身份驗證。使用表單身份驗證,登錄頁面需要設置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);
}
}
問題是Context
是null
在施工時間。
我們如何在每個模塊上啓用表單身份驗證並設置包含returnUrl
的RedirectUrl
?
(參見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(與上述方法相反)。這樣可行。