SAE版一个bug及解决方案

By 沉默小子g at 2013-05-18 15:10:04 • 685次点击

自从上次SAE版升级后我就基本没有再修改了,本来还说要fork后二次开发呢,一直拖着。
不过这两天又有了些兴致,所以慢慢有开始看代码,不知 @ego008 还记不记得我之前发帖子说覆盖升级后发帖不显示标签?
我今天仔细看了一下代码,再结合日志,发现了问题:当论坛设置仅登录用户可访问时,标签功能就会出问题。
原因如下:
在fenci.php中include了common.php,而common.php里有判断是否登陆的代码,如果没登陆会自动跳转到/login
taskqueue服务执行时当然是未登录状态,这就导致分词服务无法正常执行。
有图为证

(7那个是我设置为开放访问时,taskqueue请求返回的http状态码为200(正常)
8那个是我设置为仅登录用户可以访问时再次发新帖,可以看到状态码变为302,所以无法正常执行分词服务)
解决方法:
我只想到一个凑合可用的,在common.php里
修改
// 只允许注册用户访问
if($options['authorized'] && (!$cur_user || $cur_user['flag']<5)){

if( !in_array($url_path, array('login','logout','sigin','forgot','qqlogin','qqcallback','qqsetname','wblogin','wbcallback','wbsetname'))){

header('location: /login');

exit('authorized only');

}

}

改为
// 只允许注册用户访问
if(!strpos($_SERVER["REQUEST_URI"], 'fenci')){

if($options['authorized'] && (!$cur_user || $cur_user['flag']<5)){

if( !in_array($url_path, array('login','logout','sigin','forgot','qqlogin','qqcallback','qqsetname','wblogin','wbcallback','wbsetname'))){

header('location: /login');

exit('authorized only');

}

}
}

--------------------------------------
即,当请求页面url里面包含“fenci”时,不对登陆与否进行判断,这样bug就解决了
不过感觉这样有一个小问题(例如,若应用名称里面包含“fenci”,那么即使论坛设置为仅登录用户可访问,未登录用户依旧可以访问)
希望 @ego008 能给出一个更好的解决方案

sae, bug, 方案


忘了这一层了,可直接在数组里添加一个元素:'fenci'
array('login','logout','sigin','forgot','qqlogin','qqcallback','qqsetname','wblogin','wbcallback','wbsetname','fenci')

in_array($url_path,

path_array) 就是防这层遗漏。

ego008 at 2013-05-18 17:43:31
1
登录 后发表评论