我正在构建一个自定义Apache模块(一个特定的钩子),用于检查外部服务提供的自定义授权cookie,然后验证和解密cookie以获取用户信息,或者如果没有有效的重定向用户到我们的自定义登录服务。主要功能非常简单,看起来像这样:
static int verifyRequest(request_rec* req) {
char* authCookie;
if (!req->main) {
authCookie = getAuthCookie(req);
if (isValidAuthCookie(authCookie, req)) {
/* do stuff, inject user data, etc... */
} else {
setLoginRedirect(req);
}
}
return OK;
}
所以我希望它返回OK
如果用户被授权,然后我注入用户数据(即用户名)并做任何其他事情,然后我希望像往常一样由Apache处理请求。但是,如果用户无效,我想进行302重定向(顺便说一句,如果有更好的方法从Apache模块重定向用户,请告诉我),因为setLoginRedirect
函数插入我们的登录服务的URL进入响应头的“位置”字段。如果我尝试从302
块返回else
,我会得到一个空的回复。如果我在函数顶部声明了一个int并将其设置为OK
(或0
),如果有效,则将其设置为HTTP_TEMPORARY_REDIRECT
(或302
) else
阻塞然后返回底部的int,我得到一个空响应。我也尝试在底部使用带有if语句的布尔值,并且我也尝试通过检查底部的Location值的标题来做同样的事情 - 两者都导致空响应。
知道如何根据中间的if语句更改返回值吗?