沉默小子g avatar

SAE版一个bug及解决方案

🕗 by 沉默小子g

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

💘 相关文章

评论

共1条关于"SAE版一个bug及解决方案"的评论

ego008 avatar
#1 ego008 回复

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

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

写一条评论

Based on Golang + fastHTTP + sdb | go1.16.3 Processed in 1ms