forgeplus/app/controllers/oauth/educoder_controller.rb

74 lines
2.5 KiB
Ruby
Raw Normal View History

2020-08-14 18:19:00 +08:00
class Oauth::EducoderController < Oauth::BaseController
2021-04-02 09:23:11 +08:00
include RegisterHelper
2020-08-14 18:19:00 +08:00
def bind
begin
login = params[:login]
2020-08-18 09:07:16 +08:00
mail = params[:mail] || nil
2020-08-14 18:19:00 +08:00
callback_url = params[:callback_url]
2020-08-14 19:47:02 +08:00
token = params[:token]
2020-08-14 18:19:00 +08:00
2020-08-18 09:07:16 +08:00
::OauthEducoderForm.new({login: login, token: token, callback_url: callback_url}).validate!
2020-08-14 18:19:00 +08:00
open_user= OpenUsers::Educoder.find_by(uid: login) || OpenUsers::Educoder.find_by(uid: mail)
2020-08-14 18:19:00 +08:00
2020-08-14 22:16:24 +08:00
if open_user.present? && open_user.user.present? && open_user.user.email_binded?
2020-08-16 00:54:22 +08:00
Rails.logger.info "######## open_user exist and open_user.user exsit and email is binded ok"
successful_authentication(open_user.user)
2020-08-14 18:19:00 +08:00
redirect_to callback_url
else
2020-08-16 00:54:22 +08:00
Rails.logger.info "######## open user not exits"
2020-09-07 13:50:26 +08:00
user = User.find_by(login: login) || User.find_by(mail: mail)
2020-08-29 11:57:50 +08:00
if user.is_a?(User) && !user.is_a?(AnonymousUser)
2020-09-07 13:50:26 +08:00
OpenUsers::Educoder.create!(user: user, uid: login)
2020-08-16 13:48:48 +08:00
successful_authentication(user)
2020-08-14 23:24:54 +08:00
2020-08-14 18:19:00 +08:00
redirect_to callback_url
2020-08-16 13:48:48 +08:00
else
2020-09-11 22:40:32 +08:00
redirect_to oauth_register_path(login: login, mail: mail, callback_url: callback_url)
2020-08-14 18:19:00 +08:00
end
end
rescue WechatOauth::Error => ex
render_error(ex.message)
end
end
2021-04-01 18:01:51 +08:00
# 需要educoder那边设置回调地址
def create
begin
code = params['code'].to_s.strip
tip_exception("code不能为空") if code.blank?
2021-04-02 09:23:11 +08:00
2021-04-01 18:01:51 +08:00
new_user = false
2021-04-02 09:43:18 +08:00
result = EducoderOauth::Service.access_token(code)
2021-04-01 18:01:51 +08:00
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)
else
if current_user.blank? || !current_user.logged?
new_user = true
2021-04-02 09:23:11 +08:00
login = User.generate_login('E')
2021-04-02 16:44:36 +08:00
reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true)
2021-04-02 09:23:11 +08:00
if reg_result[:message].blank?
open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result)
successful_authentication(open_user.user)
else
render_error(reg_result[:message])
end
2021-04-01 18:01:51 +08:00
else
OpenUsers::Educoder.create!(user: current_user, uid: result['login'], extra: result)
end
end
2021-04-02 09:23:11 +08:00
redirect_to root_path(new_user: new_user)
2021-04-01 18:01:51 +08:00
rescue Exception => ex
render_error(ex.message)
end
end
2020-08-14 18:19:00 +08:00
end