diff --git a/app/controllers/oauth/acge_controller.rb b/app/controllers/oauth/acge_controller.rb index 5afc57c6b..d9db8a895 100644 --- a/app/controllers/oauth/acge_controller.rb +++ b/app/controllers/oauth/acge_controller.rb @@ -3,12 +3,16 @@ class Oauth::AcgeController < Oauth::BaseController def create begin - code = params['code'].to_s.strip - tip_exception("code不能为空") if code.blank? uid = params['uid'].to_s.strip tip_exception("uid不能为空") if uid.blank? redirect_uri = params['redirect_uri'].to_s.strip tip_exception("redirect_uri不能为空") if redirect_uri.blank? + email = params['email'].to_s.strip + tip_exception("email不能为空") if email.blank? + phone = params['phone'].to_s.strip + tip_exception("phone不能为空") if phone.blank? + name = params['name'].to_s.strip + tip_exception("name不能为空") if name.blank? open_user = OpenUsers::Acge.find_by(uid: uid) if open_user.present? && open_user.user.present? @@ -18,13 +22,41 @@ class Oauth::AcgeController < Oauth::BaseController else if current_user.blank? || !current_user.logged? session[:unionid] = uid + user = User.find_by(mail: email) || User.find_by(phone: phone) + if user.present? + OpenUsers::Acge.create!(user: user, uid: uid) + successful_authentication(user) + redirect_to redirect_uri + + return + else + username = uid[0..7] + password = SecureRandom.hex(4) + reg_result = autologin_register(username, email, password, 'acge', phone, name) + CSV.open("public/操作系统大赛用户信息.csv", 'wb') do |csv| + csv << [username, email, password, phone, name] + end + if reg_result[:message].blank? + open_user = OpenUsers::Acge.create!(user_id: reg_result[:user][:id], uid: uid) + successful_authentication(open_user.user) + redirect_to redirect_uri + + return + else + render_error(reg_result[:message]) + end + end else OpenUsers::Acge.create!(user: current_user, uid: uid) + successful_authentication(current_user) + redirect_to redirect_uri + + return end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") - redirect_to "/bindlogin/acge?redirect_uri=#{redirect_uri}" + # redirect_to "/bindlogin/acge?redirect_uri=#{redirect_uri}" rescue Exception => ex render_error(ex.message) end diff --git a/app/models/user.rb b/app/models/user.rb index afe817d33..9d623f949 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -115,7 +115,7 @@ class User < Owner # trustie: 来自Trustie平台 # forge: 平台本身注册的用户 # military: 军科的用户 - enumerize :platform, in: [:forge, :educoder, :trustie, :military, :github, :gitee, :qq, :wechat, :bot], default: :forge, scope: :shallow + enumerize :platform, in: [:forge, :educoder, :trustie, :military, :github, :gitee, :qq, :wechat, :bot, :acge], default: :forge, scope: :shallow belongs_to :laboratory, optional: true has_one :user_extension, dependent: :destroy diff --git a/public/操作系统大赛用户信息.csv b/public/操作系统大赛用户信息.csv new file mode 100644 index 000000000..7365072b2 --- /dev/null +++ b/public/操作系统大赛用户信息.csv @@ -0,0 +1,2 @@ +用户名,邮箱,密码,手机号,昵称 +123456789,yystopf1@163.com,9b653a7d,15386415122,何慧