开始研究BrowserID是因为自己想写一些小东西,需要做登录认证,又不想自己每个程序都写一遍登录界面,于是就萌生了统一登录的想法。目前我知道的统一登录的方法有三种:OAuth,OpenID,BrowserID。OpenID每次登录太麻烦,还得填写完整的URI地址,直接放弃。OAuth虽然应用的比较广,但是那个认证过程实在是蛋疼。虽然我把BrowserID的官方文档翻了N遍,实在感觉不出BrowserID与OAuth实际应用效果的区别有多大,但是BrowserID认证不需要OAuth那么麻烦,所以就决定用BrowserID做登录器了。
虽然BrowserID使用起来非常的方便,但是由于这玩意才出现不久,很多东西还不确定,变来变去的,甚至官方的文档都木有跟上代码的变动,所以还是纠结了两个多小时才搞定他:把BrowserID登录功能添加到了我的博客上。
附件里是打包好的BrowserID for Emlog文件,作用就是给你的Emlog添加BrowserID登录功能。由于Emlog的接口实在太少,所以就只能修改emlog源代码了,这里总共修改了5个文件,全部覆盖上传就可以了。登录时邮箱地址需要和你emlog用户的邮箱地址相吻合,其他的貌似就没什么需要说明的了。
接下来就是研究BrowserID时的纠结记录:
1. BrowserID在进行认证的时候(本地服务器到BrowserID服务器认证),需要设置Content-Type,并且只支持application/json和application/x-www-form-
2. 官方手册上对navigator.id.get(gotAssertion, {allowPersistent: true});和navigator.id.get(gotAssertion, {silent: true});这两个调用方法说的不是特别明确。第一个allowPersistent: true的意思就是对这个网站进行持久登录,简单来说就是显示“记住我”选项(仅仅是显示这个选项,还需要你在登录界面手动勾选)。第二个silent: true的意思就是静默登录,不弹窗。实际使用时需要先进行持久登录后才有效。而且没必要和神马按钮进行事件绑定之类的,页面加载时直接调用。以下是这两个调用方法在BrowserID for Emlog里的实际使用方法:
当页面加载时先进行静默登录,如果静默登录成功了就直接跳转。如果点击登录按钮后则进行持久登录。
3. 这个是最坑爹的:在官方手册里,登出的调用函数给的例子就是navigator.id.logout();,实际上如果直接执行这个调用压根一点效果都木有。正确的方法是要给他加一个回调函数,哪怕你回调函数里神马都不干。就为了这个问题,我纠结了一个多小时...
4. 接着就是那个蛋疼的BrowserID for Firefox插件。虽然你看着能成功安装,但是他是不兼容Firefox 8.1的,所以装上了一点效果都木有。因此我也就没有在BrowserID for Emlog里对他进行兼容了。等哪天Firefox集成了这个功能再说吧。
5. 最后奉上网上搜到的坑爹图,彻彻底底的坑爹,BrowserID完全木有这个功能的说

