class Oauth::EducoderController < Oauth::BaseController include RegisterHelper def bind begin login = params[:login] mail = params[:mail] || nil callback_url = params[:callback_url] token = params[:token] ::OauthEducoderForm.new({login: login, token: token, callback_url: callback_url}).validate! open_user= OpenUsers::Educoder.find_by(uid: login) || OpenUsers::Educoder.find_by(uid: mail) if open_user.present? && open_user.user.present? && open_user.user.email_binded? Rails.logger.info "######## open_user exist and open_user.user exsit and email is binded ok" successful_authentication(open_user.user) redirect_to callback_url else Rails.logger.info "######## open user not exits" user = User.find_by(login: login) || User.find_by(mail: mail) if user.is_a?(User) && !user.is_a?(AnonymousUser) OpenUsers::Educoder.create!(user: user, uid: login) successful_authentication(user) redirect_to callback_url else redirect_to oauth_register_path(login: login, mail: mail, callback_url: callback_url) end end rescue WechatOauth::Error => ex render_error(ex.message) end end # 需要educoder那边设置回调地址 def create begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? new_user = false result = EducoderOauth::Service.access_token(code) result = EducoderOauth::Service.user_info(result[:access_token]) # 存在该用户 open_user = OpenUsers::Educoder.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['login'] # login = User.generate_login('E') # reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) # if reg_result[:message].blank? # open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) # autosync_register_trustie(login, "Ec#{login}2021#", "#{login}@forge.com") # successful_authentication(open_user.user) # else # render_error(reg_result[:message]) # end else OpenUsers::Educoder.create!(user: current_user, uid: result['login'], extra: result) end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") redirect_to "/bindlogin/educoder" # redirect_to root_path(new_user: new_user) rescue Exception => ex render_error(ex.message) end end end