|
- module OmniAuth
- module Strategies
- class QQ < OmniAuth::Strategies::OAuth2
- option :client_options, {
- site: 'https://graph.qq.com',
- authorize_url: '/oauth2.0/authorize',
- token_url: '/oauth2.0/token'
- }
- option :token_params, { parse: :query }
-
- def request_phase
- super
- end
-
- def authorize_params
- super.tap do |params|
- %w[scope client_options].each do |v|
- if request.params[v]
- params[v.to_sym] = request.params[v]
- end
- end
- end
- end
-
- uid do
- @uid ||= begin
- access_token.options[:mode] = :query
- access_token.options[:param_name] = :access_token
- # Response Example: "callback( {\"client_id\":\"11111\",\"openid\":\"000000FFFF\"} );\n"
- response = access_token.get('/oauth2.0/me')
-
- matched = response.body.match(/"openid":"(?<openid>\w+)"/)
- matched[:openid]
- end
- end
-
- info do
- {
- name: user_info['nickname'],
- nickname: user_info['nickname'],
- image: user_info['figureurl_qq_1']
- }
- end
-
- extra do
- { raw_info: user_info }
- end
-
- def user_info
- access_token.options[:mode] = :query
- param = { oauth_consumer_key: options[:client_id], openid: uid, format: 'json' }
- @user_info ||= access_token.get('/user/get_user_info', params: param, parse: :json).parsed
- end
- end
- end
- end
|