我已经实现了自己的<button type:"submit" value:"Refresh/>
,因为我通过cookie传递了授权令牌。
AuthorizeAttribute
我的问题是public class ValidateToken : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var headers = actionContext.Request.Headers;
CookieHeaderValue authToken = headers.GetCookies().FirstOrDefault();
CookieState authCookie = authToken.Cookies.Where(p => p.Name == "AUTH-TOKEN").FirstOrDefault();
actionContext.Request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authCookie.Value);
bool isAuth = base.IsAuthorized(actionContext);
if (!base.IsAuthorized(actionContext)){
HandleUnauthorizedRequest(actionContext);
}
}
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
,当我返回HandleUnauthorizedRequest
时,再次调用函数HttpStatusCode.Unauthorized
,然后在验证后调用OnAuthorization
失败。在第二次调用时,Web API以HandleUnauthorizedRequest
返回,但是我在前端获得了登录屏幕
我不想要一个。我只想像往常一样返回401。奇怪的是,如果我用401
替换HttpStatusCode.Unauthorized
,那么该函数不会被第二次调用并立即返回。
修改我发现HttpStatusCode.Forbidden
被调用了两次并显示了登录表单,因为在Angular中我正在为我的Cookie传递OnAuthorization
。所以我需要弄清楚withCredentials: true
导致这种情况的原因。
答案 0 :(得分:0)
确保匿名身份验证 启用, Windows身份验证 禁用。
# result method
Object::r = (v) ->
s=@
st='global.'+v+'={'+'s'+'}'
re=(eval st)
str='global.'+v+'=re["s"]'
eval(str)
@
[1..10].r('a').
map( (v) -> 'lorem_ipsum_'+v.toString() ).r('ar').
join("__").r('s').
split("__").reverse().r('arr')
console.log("\n")
console.log(a); console.log("\n")
console.log(ar); console.log("\n")
console.log(s); console.log("\n")
console.log(arr); console.log("\n")