使用 Hangfire 仪表板时使用会话进行身份验证
Authentication with session when using Hangfire dashboard
我想使用会话 属性(会话["isAdmin"])来确定用户是否应该能够查看 Hangfire 仪表板。
问题是当我使用
HttpContext.Current.Session
这是空的 - 尽管我在我的其他页面上使用这个 属性 其中有数据。
我正在努力遵循代码片段。
我想让管理员角色查看页面。
public class AuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var session = HttpContext.Current.Session;
if (session == null ||
session["username"] == null ||
FindUserRole(session["username"].ToString()) !=
"ADMIN")
{
return false;
}
return true;
}
}
有没有其他方法可以让我更轻松地做到这一点?
要获取上下文,您应该使用提供的参数。像这样的东西应该是你所追求的:
public class HangfireAuthorization : IDashboardAuthorizationFilter
{
public bool Authorize([NotNull] DashboardContext currentContext)
{
return Boolean.Parse(currentContext.GetHttpContext().Session.GetString("isAdmin"));
}
}
你可以这样使用。不要忘记会话的到期时间有限。
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
public object session;
public bool Authorize(DashboardContext context)
{
var sessionToCheck = System.Web.HttpContext.Current.Session?[YourSessionKeyHere];
if (sessionToCheck != null)
{
session= sessionToCheck;
return true;
}
else if (session != null)
{
return true;
}
else
{
return false;
}
}
}
已接受的答案适用于 .NET Core,但如果您使用的是 .NET Framework,则 GetHttpContext()
不存在。我确实从这个 GitHub 问题中找到了一个有效的答案:
https://github.com/HangfireIO/Hangfire/issues/978
如果您注册 IHttpModule
并将会话状态设置为必需
context.SetSessionStateBehavior(SessionStateBehavior.Required);
那么,HttpContext.Current.Session
在HangfireAuthorizationFilter
中不会为空
我想使用会话 属性(会话["isAdmin"])来确定用户是否应该能够查看 Hangfire 仪表板。
问题是当我使用
HttpContext.Current.Session
这是空的 - 尽管我在我的其他页面上使用这个 属性 其中有数据。
我正在努力遵循代码片段。
我想让管理员角色查看页面。
public class AuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var session = HttpContext.Current.Session;
if (session == null ||
session["username"] == null ||
FindUserRole(session["username"].ToString()) !=
"ADMIN")
{
return false;
}
return true;
}
}
有没有其他方法可以让我更轻松地做到这一点?
要获取上下文,您应该使用提供的参数。像这样的东西应该是你所追求的:
public class HangfireAuthorization : IDashboardAuthorizationFilter
{
public bool Authorize([NotNull] DashboardContext currentContext)
{
return Boolean.Parse(currentContext.GetHttpContext().Session.GetString("isAdmin"));
}
}
你可以这样使用。不要忘记会话的到期时间有限。
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
public object session;
public bool Authorize(DashboardContext context)
{
var sessionToCheck = System.Web.HttpContext.Current.Session?[YourSessionKeyHere];
if (sessionToCheck != null)
{
session= sessionToCheck;
return true;
}
else if (session != null)
{
return true;
}
else
{
return false;
}
}
}
已接受的答案适用于 .NET Core,但如果您使用的是 .NET Framework,则 GetHttpContext()
不存在。我确实从这个 GitHub 问题中找到了一个有效的答案:
https://github.com/HangfireIO/Hangfire/issues/978
如果您注册 IHttpModule
并将会话状态设置为必需
context.SetSessionStateBehavior(SessionStateBehavior.Required);
那么,HttpContext.Current.Session
在HangfireAuthorizationFilter