六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

QQ账号登陆的Ruby实现

[复制链接]

升级  76%

8

主题

8

主题

8

主题

童生

Rank: 1

积分
38
 楼主| 发表于 2013-1-14 07:15:30 | 显示全部楼层 |阅读模式
腾讯公司最近开放了QQ登陆,这对广大站长是个好消息,从此实现QQ账号登陆您的网站不再是梦想。但是遍寻腾讯的SDK文档,并不见Ruby的实现,这对Ruby爱好者可不是个好消息。经过好几天的摸索,我终于成功实现了QQ登陆了。下面把代码贴出来。
 
首先要安装oauth
gem install oauth
 
写上配置信息

CONSUMER_OPTIONS = {
        :site => "http://openapi.qzone.qq.com",
        :request_token_path => "/oauth/qzoneoauth_request_token",
        :access_token_path => "/oauth/qzoneoauth_access_token",
        :authorize_path => "/oauth/qzoneoauth_authorize",
        :http_method => :get,
        :scheme => :query_string,        
        :nonce => Base64.encode64(OpenSSL::Random.random_bytes(32)).gsub(/\W/, '')[0, 32] }
 
  QQ_KEY = ×××
  QQ_SECRET = '×××××××××××××××××××××××××××××'
 
其中,QQ_KEY和QQ_SECRET换上你们自己的。
 
 
#第一个方法

def login_from_qq
    consumer = OAuth::Consumer.new(QQ_KEY, QQ_SECRET, CONSUMER_OPTIONS)
    request_token = consumer.get_request_token()
    session[:qqtoken] = request_token.token
    session[:qqsecret] = request_token.secret
 
 
    redirect_to request_token.authorize_url + "&oauth_consumer_key=205799&oauth_callback=http%3A%2F%2Flocalhost:3000%2Faccount%2Flogin_from_qq_callback"
  end
 
#用户点击授权后,调用回调方法
def login_from_qq_callback
  consumer = OAuth::Consumer.new(QQ_KEY, QQ_SECRET, CONSUMER_OPTIONS)
    request_token = ::OAuth::RequestToken.new(consumer, session[:qqtoken], session[:qqsecret])
    access_token = request_token.get_access_token(:oauth_vericode => params[:oauth_vericode])
 
   response = access_token.get("/user/get_user_info?openid=#{params[:openid]}")
     return_hash = ActiveSupport::JSON.decode(response.body)
     nickname        = User.find_by_name(return_hash["nickname"])
....
end
 
腾讯的接口有一个参数名字比较怪异,别人都叫做:oauth_verifier,他偏要叫做:oauth_vericode,这要进行一个oauth gem库的crack,进入ruby的gem路径,打开/oauth-0.4.4/lib/oauth/client/helper.rb文件,在oauth_parameters方法下加上一行代码,例如:

'oauth_verifier'         => options[:oauth_verifier],
        'oauth_vericode'         => options[:oauth_vericode],
然后重启ROR服务,后端代码就算写好了。前端网页加上一个qq登陆的图片,链接到login_from_qq。这样,QQ登陆就算是做好了。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表