Class: OmniAuth::Strategies::WeChatService

Inherits:
OAuth2
  • Object
show all
Defined in:
lib/omniauth/strategies/wechat_service.rb

Instance Method Summary collapse

Methods inherited from OAuth2

#callback_url

Instance Method Details

#authorize_paramsObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/omniauth/strategies/wechat_service.rb', line 41

def authorize_params
  params = options.authorize_params.merge({
    appid: options.client_id,
    redirect_uri: callback_url,
    response_type: 'code',
    state: request.params['state'],
    scope: request.params['scope'] || 'snsapi_userinfo'
  })
  if OmniAuth.config.test_mode
    @env ||= {}
    @env["rack.session"] ||= {}
  end
  unless options.provider_ignores_state
    params[:state] = SecureRandom.hex(24)
    session["omniauth.state"] = params[:state]
  end
  params
end

#callback_phaseObject



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/omniauth/strategies/wechat_service.rb', line 64

def callback_phase
  # 其它 app 需要获取微信openid 时,将 callbackurl 传入 state 参数
  if request.params['state'].match(/\Ahttps?:\/\/(.*\.)?geekpark\.net\/.*\z/)
    uri = URI(request.params['state'])
    query = Rack::Utils.parse_nested_query(uri.query).merge(code: request.params['code'])
    uri.query = URI.encode_www_form query
    env['omniauth.redirect'] = uri.to_s
    call_app!
  else
    super
  end
end

#raw_infoObject



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/omniauth/strategies/wechat_service.rb', line 23

def raw_info
  @raw_info ||= begin
                  response = access_token.get(
                    '/sns/userinfo',
                    { params: { access_token: access_token.token,
                                openid: access_token['openid'],
                                lang: 'zh-CN' },
                                parse: :json }
                  ).parsed
                  log :debug, response
                  response
                end
end

#request_phaseObject



37
38
39
# File 'lib/omniauth/strategies/wechat_service.rb', line 37

def request_phase
  redirect client.authorize_url(authorize_params)+'#wechat_redirect'
end

#token_paramsObject



60
61
62
# File 'lib/omniauth/strategies/wechat_service.rb', line 60

def token_params
  { appid: options.client_id, secret: options.client_secret }
end