parent
c52f960832
commit
7125e71563
@ -0,0 +1,34 @@
|
||||
class Weapps::BaseController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def require_wechat_login!
|
||||
return if session_unionid.present?
|
||||
|
||||
render_error('请先进行微信授权')
|
||||
end
|
||||
|
||||
def weapp_session_key
|
||||
Wechat::Weapp.session_key(session_openid)
|
||||
end
|
||||
|
||||
def set_weapp_session_key(session_key)
|
||||
Wechat::Weapp.write_session_key(session_openid, session_key)
|
||||
end
|
||||
|
||||
def session_openid
|
||||
session[:openid]
|
||||
end
|
||||
|
||||
def set_session_openid(openid)
|
||||
session[:openid] = openid
|
||||
end
|
||||
|
||||
def session_unionid
|
||||
session[:unionid]
|
||||
end
|
||||
|
||||
def set_session_unionid(unionid)
|
||||
session[:unionid] = unionid
|
||||
end
|
||||
end
|
@ -0,0 +1,24 @@
|
||||
class Weapps::CodeSessionsController < Weapps::BaseController
|
||||
def create
|
||||
return render_error('code不能为空') if params[:code].blank?
|
||||
|
||||
result = Wechat::Weapp.jscode2session(params[:code])
|
||||
|
||||
set_session_openid(result['openid'])
|
||||
set_weapp_session_key(result['session_key']) # weapp session_key写入缓存 后续解密需要
|
||||
|
||||
# 已授权,绑定过账号
|
||||
open_user = OpenUser::Wechat.find_by(uid: result['unionid'])
|
||||
if open_user.present? && open_user.user
|
||||
set_session_unionid(result['unionid'])
|
||||
successful_authentication(open_user.user)
|
||||
else
|
||||
# 新用户
|
||||
user_info = Wechat::Weapp.decrypt(result['session_key'], params[:encrypted_data], params[:iv])
|
||||
|
||||
set_session_unionid(user_info['unionId'])
|
||||
end
|
||||
|
||||
render_ok(openid: result['openid'])
|
||||
end
|
||||
end
|
@ -0,0 +1,24 @@
|
||||
class Weapps::SessionsController < Weapps::BaseController
|
||||
before_action :require_wechat_login!
|
||||
|
||||
def create
|
||||
return render_error('重复登录') if current_user.present? && current_user.logged?
|
||||
|
||||
user = User.try_to_login(params[:login], params[:password])
|
||||
|
||||
return render_error('错误的账号或密码') if user.blank?
|
||||
return render_error('违反平台使用规范,账号已被锁定') if user.locked?
|
||||
return render_error('错误的账号或密码') unless user.check_password?(params[:password].to_s)
|
||||
|
||||
if user.wechat_open_user && user.wechat_open_user.uid != session_unionid
|
||||
render_error('该账号已被其它微信号绑定')
|
||||
return
|
||||
end
|
||||
|
||||
# 绑定微信号
|
||||
OpenUsers::Wechat.create!(user: user, uid: session_unionid) if user.wechat_open_user.blank?
|
||||
|
||||
successful_authentication(user)
|
||||
render_ok
|
||||
end
|
||||
end
|
@ -0,0 +1,8 @@
|
||||
class Weapps::VerifiesController < Weapps::BaseController
|
||||
before_action :require_wechat_login!
|
||||
|
||||
def create
|
||||
valid = Wechat::Weapp.verify?(session_openid, params[:verify_string], params[:signature])
|
||||
render_ok(valid: valid)
|
||||
end
|
||||
end
|
Loading…
Reference in new issue