- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定是我做错了什么还是存在某种错误。如果这是一个错误,那么我认为这会立即出现。无论哪种方式:
我在此处使用扩展方法 RequiresAuthentication:
使用 SecurityHooks
或者具体的代码:
public static void RequiresAuthentication(this INancyModule module)
{
module.AddBeforeHookOrExecute(SecurityHooks.RequiresAuthentication(), "Requires Authentication");
}
安全 Hook :
public static Func<NancyContext, Response> RequiresAuthentication()
{
return UnauthorizedIfNot(ctx => ctx.CurrentUser.IsAuthenticated());
}
private static Func<NancyContext, Response> UnauthorizedIfNot(Func<NancyContext, bool> test)
{
return HttpStatusCodeIfNot(HttpStatusCode.Unauthorized, test);
}
private static Func<NancyContext, Response> HttpStatusCodeIfNot(HttpStatusCode statusCode, Func<NancyContext, bool> test)
{
return (ctx) =>
{
Response response = null;
if (!test(ctx))
{
response = new Response { StatusCode = statusCode };
}
return response;
};
}
如您所见,如果用户未通过身份验证,则返回 HttpStatusCode.Unauthorized 应该。似乎很容易。当我对如下路线进行 AJAX 调用时:
Post["/comment/flag/{Id}"] = s =>
{
this.RequiresAuthentication();
return new IdResponse { Id = commentRepo.FlagComment(Context.CurrentUser.UserName, s.Id) };
};
我返回一个 303,然后重定向到带有 200 的登录 URL。真讨厌。完全没有想到。
为了确保我没有完全疯了,我做了以下操作并且效果很好:
Post["/comment/{Id}"] = s =>
{
if ((Context.CurrentUser == null) ||
String.IsNullOrWhiteSpace(Context.CurrentUser.UserName))
{
return HttpStatusCode.Forbidden;
}
var req = this.Bind<CommentRequest>();
return commentRepo.AddComment(Context.CurrentUser.UserName, s.Id, req.Comment);
};
这将返回预期的 403。但是谁愿意将其粘贴到各处……不是我。我正在尝试弄清楚如何编写我自己的在路线运行之前执行的东西,但我是 Nancy 的新手。
奇怪的是,如果我改变:
return HttpStatusCode.Forbidden;
变成一个
return new Response { StatusCode = HttpStatusCode.Forbidden };
然后我再次收到 303 和 200 响应。好像有什么东西坏了。谁能给我一些见解或我做错了什么的答案?南希对我来说似乎很伤心,特别是 Response 类......
最佳答案
我遇到了和你一样的问题 - 什么都没坏。
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
此代码将函数添加到流水线之前和之后。它需要每个 401 并将其更改为 303,因为您已经定义了如果用户未登录则应将其重定向。
为了防止这种情况发生,您可以将 DisableRedirect
属性设置为 true。实际上,您可以像这样对所有 Ajax 请求自动执行此操作:
new FormsAuthenticationConfiguration()
{
...,
DisableRedirect = context.Request.IsAjaxRequest()
};
此外,请确保您的请求将 X-Requested-With
header 设置为 XMLHttpRequest
,否则 nanacy 无法检测到它是一个 ajax 请求。为了将 DisableRedirect 设置为 true,您当然可以随意检测不同的正确请求(基于 url,...)。
关于NancyFx RequiresAuthentication 扩展返回 303 而不是 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212140/
我不确定是我做错了什么还是存在某种错误。如果这是一个错误,那么我认为这会立即出现。无论哪种方式: 我在此处使用扩展方法 RequiresAuthentication: https://github.c
我使用 Spring 4.1.2、Shiro 1.2.3(核心、web、spring)并且我正在创建 RestControllers。在示例中的类中,我使用 @RequiresAuthenticati
我目前在 play-pac4j 库与 Play Framework 2.5 结合使用时遇到问题。 注释: @RequiresAuthentication(clientName = "FacebookC
我是一名优秀的程序员,十分优秀!