• QQ账号登陆的Ruby实现


    腾讯公司最近开放了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方法下加上一行代码,例如:

    wander和imagin有什么区别

    'oauth_verifier'         => options[:oauth_verifier],

            'oauth_vericode'         => options[:oauth_vericode],

    然后重启ROR服务,后端代码就算写好了。前端网页加上一个qq登陆的图片,链接到login_from_qq。这样,QQ登陆就算是做好了。
    另外,QQ登陆虽然是不需要审核的,但是如果需要把网站信息同步到用户的qzone中去,需要更多接口权限,这需要经过腾讯审核。
  • 相关阅读:
    java synchronized
    [多问几个为什么]为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?(转)
    Java中static、final用法小结(转)
    使用 Spring 2.5 注释驱动的 IoC 功能(转)
    (转载)Spring 注解@Component,@Service,@Controller,@Repository
    Spring中@Autowired注解、@Resource注解的区别
    控制反转和依赖注入模式(转)
    HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)
    HDU 4745 Two Rabbits (2013杭州网络赛1008,最长回文子串)
    HDU 4747 Mex (2013杭州网络赛1010题,线段树)
  • 原文地址:https://www.cnblogs.com/sky7034/p/2055219.html
Copyright © 2020-2023  润新知