diff --git a/app/libs/omniauth/strategies/qq.rb b/app/libs/omniauth/strategies/qq.rb index 7940b9cee..169524e23 100644 --- a/app/libs/omniauth/strategies/qq.rb +++ b/app/libs/omniauth/strategies/qq.rb @@ -22,7 +22,17 @@ module OmniAuth end end - uid { raw_info['openid'].to_s } + 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":"(?\w+)"/) + matched[:openid] + end + end info do { @@ -36,17 +46,9 @@ module OmniAuth { raw_info: user_info } end - def raw_info - access_token.options[:mode] = :query - @raw_info ||= begin - res = access_token.get('/oauth2.0/me', parse: :text).parsed - JSON.parse(res.to_s[10..-4]) - end - end - def user_info access_token.options[:mode] = :query - params = { oauth_consumer_key: options.client_id, openid: raw_info['openid'], format: 'json' } + params = { oauth_consumer_key: options.client_id, openid: uid, format: 'json', parse: :json } @user_info ||= access_token.get('/user/get_user_info', params: params).parsed end end