Li Yafei
A senior Ruby on Rails developer
80学院第五次课
# Gemfile
gem 'omniauth'
gem 'omniauth-wechat-oauth2'
# /config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :wechat,ENV['OMNIAUTH_WECHAT_KEY'], ENV['OMNIAUTH_WECHAT_SECRET'],
provider_ignores_state: true
end
# /config/routes.rb
get '/auth/:provider/callback' => 'sessions#create'
# app/controllers/sessions_controller.rb
def create
auth = request.env["omniauth.auth"]
logger.debug auth
user = User.where(uid: uid.to_s).first
if user.present?
user.update_user_info(auth)
else
user = User.create_with_wechat(auth)
end
login_as(user)
redirect_to root_path
end
# /app/models/user.rb
def self.create_with_wechat(auth)
create! do |user|
user.provider = 'wechat'
user.uid = auth['uid']
if auth['info']
user.name = auth['info']['name'] || auth['info']['nickname'] || ''
user.avatar = auth['info']['headimgurl']
user.sex = auth['info']['sex']
user.province = auth['info']['province']
user.city = auth['info']['city']
user.country = auth['info']['country']
end
end
end
# Gemfile
gem 'weixin_authorize'
# _share.js.erb
<% sign_package = WxAuth.get_jssign_package(request.url) %>
<script>
wx.config({
debug: false,
appId: "<%= sign_package['appId'] %>",
timestamp: "<%= sign_package['timestamp'] %>",
nonceStr: "<%= sign_package['nonceStr'] %>",
signature: "<%= sign_package['signature'] %>",
jsApiList: [
'onMenuShareTimeline',
]
});
wx.ready(function () {
// 设置“分享到朋友圈”按钮点击状态及自定义分享内容
wx.onMenuShareTimeline({
title: "<%= @share_puppy_info[:title] %>",
link: "<%= @share_puppy_info[:url] %>",
imgUrl: "<%= avatar_url(@share_puppy_info[:img]) %>",
success: function(){
},
});
});
</script>
By Li Yafei