class Oauth::Ci4sController < Oauth::BaseController include RegisterHelper def oauth_url redirect_to Ci4s::Service.oauth_url end # 需要educoder那边设置回调地址 def create begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? new_user = false token = Ci4s::Service.access_token(code) # result = token[:account_info] result = Ci4s::Service.user_info(result[:access_token]) # 存在该用户 open_user = OpenUsers::Ci4s.find_by(uid: result['login']) if open_user.present? && open_user.user.present? successful_authentication(open_user.user) redirect_to root_path(new_user: false) return else if current_user.blank? || !current_user.logged? new_user = true session[:unionid] = result['username'] # login = User.generate_login('E') login = result['username'] email = result['email'] email = "#{login}@forge.com" if email.blank? reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', result['mobile']) if reg_result[:message].blank? open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: result) successful_authentication(open_user.user) else render_error(reg_result[:message]) end else OpenUsers::Ci4s.create!(user: current_user, uid: result['login'], extra: result) end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") redirect_to root_path(new_user: new_user) rescue Exception => ex render_error(ex.message) end end end