class Sorcery::Providers::Wechat

This class adds support for OAuth with open.wx.qq.com.

config.wechat.key = <key>
config.wechat.secret = <secret>
...

Attributes

auth_url[RW]
mode[R]
param_name[R]
parse[R]
scope[RW]
token_url[RW]
user_info_path[RW]

Public Class Methods

new() click to toggle source
Calls superclass method Sorcery::Providers::Base::new
# File lib/sorcery/providers/wechat.rb, line 15
def initialize
  super

  @scope = 'snsapi_login'
  @auth_url = 'https://open.weixin.qq.com/connect/qrconnect'
  @user_info_path = 'https://api.weixin.qq.com/sns/userinfo'
  @token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
  @state = SecureRandom.hex(16)
  @mode = :body
  @parse = :json
  @param_name = 'access_token'
end

Public Instance Methods

authorize_url(options = {}) click to toggle source
# File lib/sorcery/providers/wechat.rb, line 28
def authorize_url(options = {})
  oauth_params = {
    appid: @key,
    redirect_uri: @callback_url,
    response_type: 'code',
    scope: scope,
    state: @state
  }
  "#{options[:authorize_url]}?#{oauth_params.to_query}#wechat_redirect"
end
get_access_token(args, options = {}) click to toggle source
# File lib/sorcery/providers/wechat.rb, line 54
def get_access_token(args, options = {})
  client = build_client(options)
  client.auth_code.get_token(
    args[:code],
    { appid: @key, secret: @secret, parse: parse },
    options
  )
end
get_user_hash(access_token) click to toggle source
# File lib/sorcery/providers/wechat.rb, line 39
def get_user_hash(access_token)
  response = access_token.get(
    user_info_path,
    params: {
      access_token: access_token.token,
      openid: access_token.params['openid']
    }
  )

  {}.tap do |h|
    h[:user_info] = JSON.parse(response.body)
    h[:uid] = h[:user_info]['unionid']
  end
end
login_url(_params, _session) click to toggle source
# File lib/sorcery/providers/wechat.rb, line 63
def login_url(_params, _session)
  authorize_url authorize_url: auth_url
end
process_callback(params, _session) click to toggle source
# File lib/sorcery/providers/wechat.rb, line 67
def process_callback(params, _session)
  args = {}.tap do |a|
    a[:code] = params[:code] if params[:code]
  end

  get_access_token(
    args,
    token_url: token_url,
    mode: mode,
    param_name: param_name
  )
end