沉默小子g
沉默小子g
3322 1 0

SAE版一个bug及解决方案

自从上次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 能给出一个更好的解决方案

0

See Also

Nearby


Discussion (1)

ego008
ego008 2013-05-18 09:43

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

in_array($url_path, path_array) 就是防这层遗漏。

0
Login Topics