fengchang 发布的文章

微信内Web App自动登录

最初是在Tower.im的公众号里见到了WebApp自动登录,想做一个同样效果的。那时候对公众号开发不熟悉,问了一些人也说的稀里糊涂的,文档又乱,最后花了好长时间才实现。这个功能需要的接口是「网页授权获取用户基本信息」,需要认证企业号才能使用。如果没有权限的话可以试一下微信之门,我也只是知道这个东西,从来没试过。

基本的思路是通过公众号OAuth API获取用户微信的openid。第一次使用的时候让用户登录,然后在数据库里把openid和自己应用的userid对应起来。以后获得用户的openid之后就可以自动登录到对应的用户上。

我的Web App是用AngularJS实现的SPA,登录之后获取一个token放在localStorage,给后端发请求的时候,把token写在Header的Authorization里。

这个过程中不需要使用Cookie,但是为了减少跳转次数,还是用了Cookie。我把和微信登录相关的功能写在了几个PHP单页里,用一个redirect.php做入口,把要跳转的页面放在参数里,由redirect.php检查用户是否已经获得了token,在获取到token之后跳转到目标页面。

登录流程图如下:

- 阅读剩余部分 -

从一行JavaScript代码生成随机字符串说起

今天在写JS的时候,要生成一个随机字符串,JavaScript中没有PHP的uniqid()方法,我Google了一下,在Stack Overflow上看到了一个很漂亮的函数,只有一行:

function generateUIDNotMoreThan1million() {
    return ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4)
}

这种代码以前都copy来直接用,不过今天读到一篇《从一行CSS调试代码中学到的JavaScript知识》,觉得还蛮有意思的,我也试着来解读一下这行代码。

- 阅读剩余部分 -

Pomelo中一次RPC调用被多次执行

每次遇到很久调试不出来的bug,都觉得这个bug只要解决了,以后的「你调过的最难调的bug是哪个?」这个问题就有答案了。但是最后找到的原因都是很弱智的错误。

这个bug由来已久,大约两个月之前出现的。在新玩家加入游戏的时候,会给场景内的玩家推送一条onJoin消息。告诉其他玩家这个新人的信息。

后来为了方便做假用户,就另外写了一个入口,供机器人登录,登录后会给所有场景的玩家广播一条onJoin,也去掉了一些玩家需要的信息和游戏逻辑,机器人只是出现在游戏场景里,并不会留下游戏记录。

- 阅读剩余部分 -

PHP中三元运算符的结合性

春节之后上了两门Coursera课程,又跟集智俱乐部研究了一个多月神经网络,一篇博客都没写完。今天先从一篇短文开始,再慢慢完成之前的一些草稿。

昨天鸟哥在PHP Conference讲到PHP7的AST时,说起PHP的一个历史遗留问题:三元运算符的结合性。PHP的语法是类似于C的,但是在这里却不一样。

- 阅读剩余部分 -