这两天在给自己的一个小站做 OmniAuth 登录,折腾有感。
国外用户就用 facebook/twitter, 都有现成可用的 gem, 前者 OAuth2 后者 OAuth, 连上就用起来了。
国内的用户就用 weibo 和 QQ,有现成的 gem,但有这那的问题。 首先,weibo 的 gem 基于 OAuth,但 weibo 已经迁移到 OAuth2,老版本 gem 会有些 bug。得益于 weibo 的 OAuth 认证和相关 api 都是照搬 twitter 的,调试和应用还算省心。
再看 QQ,问题就比较多了,首先开放平台下面有很多支登录认证服务,有 QQ 登录、TQQ 登录、QZone 登录... 选择多,API 也乱,同平台下各自为立,如 QQ 登录用 OAuth2,TQQ 是 OAuth, 拿到的数据也不一致。
再回想起两年前,测试 taobao 的 TOP API...各大拿有点乱! 当然开放平台,整合数据是好事,让开发人员多了很多思路。只是还需要点功夫来节约大家的时间。
还不错啦! 记得我 08 年的时候写了一个豆瓣的 oauth api 客户端(遗骸: http://code.google.com/p/doubanclient-ruby/ )。 写好了以后拿去给老师当作业交,当时豆瓣的 oauth server 还处于调试阶段,给老师验收的时候豆瓣的 server 不知到出了什么毛病。。程序跑不起来了。。
后来写 oauth_china( https://github.com/hooopo/oauth_china )这个 gem 的时候,又有机会和搜狐网易这些 oauth server 打交道。。
然后,再看到 oauth 几个字就躲着走。。。
我到觉得没那么严重,国内的几个主要 oauth 都有 gem 啊
gem "omniauth-douban", :git => "git://github.com/xdite/omniauth-douban.git"
gem "omniauth-weibo", :git => "git://github.com/ywencn/omniauth-weibo.git"
gem "omniauth-renren", :git => "git://github.com/ywencn/omniauth-renren.git"
gem 'omniauth-qq-connect'
现在 weibo 用的 oauth2 是简单很多,我连 gem 都不用了,用 rest-client,认证过程就两行。希望 oauth 的也赶紧迁移到 oauth2。
我也用了下新浪微博的 oauth,换了几个插件,都会报错,include? nil:NilClass 这个。后面换成了 oauth-china 才能正常使用。
当初搞 weibo 的 api,什么都做对了,就是返回 callback 错误,到论坛求助,被教育了一番 oauth2 原理,无果。
发邮件到技术邮箱,回复要截图,然后截图发过去,一周没回应……
之后去试,竟然就好了,也不告诉我一声
关于 oauth2 这个 gem, https://github.com/intridea/oauth2 真的不靠谱吧,用它搞新浪微博登陆,死活有个错误
#19 楼 @fresh_fish #20 楼 @_kaichen 有错误要看是什么错误,很多事情有些 server side 对协议实现的不好或者加了自己的限制,也是会导致错误的。曾经被 twitter oauth 搞崩溃的人有感
@_kaichen @yedingding 我看了一下源码,新浪 weibo 获取 access_token 的时候,要手动 :parse 类型和 content-type 不然对不上号 这下可以了 崩溃
@client.auth_code.get_token(code_value, :redirect_uri => REDRECT_URI, :parse => :query) 如果 content-type 是 json 的话 parse 就是 json
@yedingding 请教个问题啊,腾讯微博的开放平台,在开发测试过程中,不需要像新浪微博一样,在腾讯那边还要设置回调地址和测试用户账号吧?没有找到设置的地方哦
#24 楼 @fresh_fish 没玩过国内的开放平台。对于 OAuth 或者 OAuth2 来说,重要的是 consumer key 和 secret,有些服务商会有默认的 callback 地址,也会在发起验证的时候允许你动态指定 callback 地址,这些都是可以的。但是.... 无法设置这个事情不靠谱啊.... 可能是你没找到吧