使用returnUrl对每个模块进行身份验证
本文关键字:身份验证 模块 returnUrl 使用 | 更新日期: 2023-09-27 18:16:47
我需要对某些模块和其他模块的无状态认证进行表单认证。使用Forms Authentication时,登录页面需要设置一个returnUrl
.
我们已经在应用程序范围内的表单身份验证(为管道启用)中工作,但我们一直在尝试启用混合身份验证。
Per 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钩子:
Before.AddItemToStartOfPipeline(
ctx =>
{
if (!formsAuthConfiguration.RedirectUrl.Contains("?"))
{
formsAuthConfiguration.RedirectUrl +=
"?returnUrl=" + ctx.Request.Headers["X-Original-URL"].FirstOrDefault();
}
return null;
});
(附原RedirectUrl = "/login"
)
这将导致无法调试的405。(Before +=
语法相同)
他还建议将所有内容移到钩子中,而不是存储配置并对其进行修改;
目前我在RequestStartup中使用if/else逻辑(与上述方法相反)。div。
在RequestStartup中使用if/else逻辑行得通