Class: OmniAuth::Strategies::WeChat

Inherits:
Object
  • Object
show all
Includes:
OmniAuth::Strategy
Defined in:
lib/omniauth/strategies/wechat.rb

Defined Under Namespace

Classes: CallbackError

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#access_tokenObject

Returns the value of attribute access_token.



29
30
31
# File 'lib/omniauth/strategies/wechat.rb', line 29

def access_token
  @access_token
end

Instance Method Details

#authorize_paramsObject



52
53
54
55
56
57
58
59
60
# File 'lib/omniauth/strategies/wechat.rb', line 52

def authorize_params
  state_param = SecureRandom.hex(24)      
  options.authorize_params.merge({:appid=>options.appid,
    :redirect_uri => callback_url,
    :response_type => 'code',
    :scope => 'snsapi_userinfo',
    :state=>state_param
   })
end

#callback_phaseObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/omniauth/strategies/wechat.rb', line 70

def callback_phase
  if request.params['code'].nil? ||!request.params['code'].present?
    raise CallbackError.new('noauthorize','user cancel authorizing')
  end
 

  self.access_token = build_access_token
  log :debug,access_token['openid']
  super
  #self.access_token = refresh_access_token(access_token) if access_token.expired?
rescue ::OAuth2::Error, CallbackError => e
  fail!(:invalid_credentials, e)
rescue ::MultiJson::DecodeError => e
  fail!(:invalid_response, e)
rescue ::Timeout::Error, ::Errno::ETIMEDOUT, Faraday::Error::TimeoutError => e
  fail!(:timeout, e)
rescue ::SocketError, Faraday::Error::ConnectionFailed => e
  fail!(:failed_to_connect, e)
end

#callback_urlObject



36
37
38
# File 'lib/omniauth/strategies/wechat.rb', line 36

def callback_url
  full_host + script_name + callback_path+ query_string
end

#client(opt = {}) ⇒ Object



31
32
33
34
# File 'lib/omniauth/strategies/wechat.rb', line 31

def client(opt={})
  client_options = options.client_options.merge(opt)
  ::OAuth2::Client.new(options.appid, options.secret, deep_symbolize(client_options))
end

#raw_infoObject



112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/omniauth/strategies/wechat.rb', line 112

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

#request_phaseObject



48
49
50
# File 'lib/omniauth/strategies/wechat.rb', line 48

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

#token_paramsObject



66
67
68
# File 'lib/omniauth/strategies/wechat.rb', line 66

def token_params
    {:appid=>options.appid,:secret=>options.secret}
end