mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 11:50:49 +08:00
init project
This commit is contained in:
51
app/controllers/oauth/base_controller.rb
Normal file
51
app/controllers/oauth/base_controller.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
class Oauth::BaseController < ActionController::Base
|
||||
include RenderHelper
|
||||
include LoginHelper
|
||||
include ControllerRescueHandler
|
||||
# include LaboratoryHelper
|
||||
|
||||
skip_before_action :verify_authenticity_token
|
||||
|
||||
def auth_failure
|
||||
render_error(params[:message])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def session_user_id
|
||||
# session[:user_id]
|
||||
session[:"#{default_yun_session}"]
|
||||
end
|
||||
|
||||
def current_user
|
||||
@_current_user ||= User.find_by(id: session_user_id)
|
||||
end
|
||||
|
||||
def auth_hash
|
||||
Rails.logger.info("[OAuth2] omniauth.auth -> #{request.env['omniauth.auth'].inspect}")
|
||||
request.env['omniauth.auth']
|
||||
end
|
||||
|
||||
def default_yun_session
|
||||
@_default_yun_session = "#{request.subdomain.split('.').first}_user_id"
|
||||
# @_default_yun_session = "#{current_laboratory.try(:identifier).split('.').first}_user_id"
|
||||
end
|
||||
|
||||
def session_openid
|
||||
session[:openid]
|
||||
end
|
||||
|
||||
def set_session_openid(openid)
|
||||
Rails.logger.info("[wechat] set session openid: #{openid}")
|
||||
session[:openid] = openid
|
||||
end
|
||||
|
||||
def session_unionid
|
||||
session[:unionid]
|
||||
end
|
||||
|
||||
def set_session_unionid(unionid)
|
||||
Rails.logger.info("[wechat] set session unionid: #{unionid}")
|
||||
session[:unionid] = unionid
|
||||
end
|
||||
end
|
||||
13
app/controllers/oauth/cas_controller.rb
Normal file
13
app/controllers/oauth/cas_controller.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
class Oauth::CasController < Oauth::BaseController
|
||||
def create
|
||||
user, is_new_user = Oauth::CreateORFindCasUserService.call(current_user, auth_hash)
|
||||
successful_authentication(user)
|
||||
|
||||
redirect_to root_url
|
||||
end
|
||||
|
||||
|
||||
def auth_hash
|
||||
JSON.parse(CGI.unescape(request.env['omniauth.auth'].extra.to_json))
|
||||
end
|
||||
end
|
||||
9
app/controllers/oauth/qq_controller.rb
Normal file
9
app/controllers/oauth/qq_controller.rb
Normal file
@@ -0,0 +1,9 @@
|
||||
class Oauth::QQController < Oauth::BaseController
|
||||
def create
|
||||
user, new_user = Oauth::CreateOrFindQqAccountService.call(current_user, auth_hash)
|
||||
|
||||
successful_authentication(user)
|
||||
|
||||
render_ok(new_user: new_user)
|
||||
end
|
||||
end
|
||||
32
app/controllers/oauth/wechat_controller.rb
Normal file
32
app/controllers/oauth/wechat_controller.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
class Oauth::WechatController < Oauth::BaseController
|
||||
def create
|
||||
# user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params)
|
||||
|
||||
begin
|
||||
code = params['code'].to_s.strip
|
||||
tip_exception("code不能为空") if code.blank?
|
||||
new_user = false
|
||||
|
||||
result = WechatOauth::Service.access_token(code)
|
||||
result = WechatOauth::Service.user_info(result['access_token'], result['openid'])
|
||||
|
||||
# 存在该用户
|
||||
open_user = OpenUsers::Wechat.find_by(uid: result['unionid'])
|
||||
if open_user.present? && open_user.user.present?
|
||||
successful_authentication(open_user.user)
|
||||
else
|
||||
if current_user.blank? || !current_user.logged?
|
||||
new_user = true
|
||||
set_session_openid(result['openid'])
|
||||
set_session_unionid(result['unionid'])
|
||||
else
|
||||
OpenUsers::Wechat.create!(user: current_user, uid: result['unionid'])
|
||||
end
|
||||
end
|
||||
|
||||
render_ok(new_user: new_user)
|
||||
rescue WechatOauth::Error => ex
|
||||
render_error(ex.message)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user