54 lines
1.9 KiB
Ruby
54 lines
1.9 KiB
Ruby
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)
|
|
Rails.logger.info("[OAuth2] result -> #{token}")
|
|
result = Ci4s::Service.user_info(token[:access_token])
|
|
tip_exception("请求用户信息错误") if result['code'].to_i != 200
|
|
user_info = result['data']
|
|
# 存在该用户
|
|
open_user = OpenUsers::Ci4s.find_by(uid: user_info['username'])
|
|
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] = user_info['username']
|
|
# login = User.generate_login('E')
|
|
login = user_info['username']
|
|
email = user_info['email']
|
|
email = "#{login}@forge.com" if email.blank?
|
|
reg_result = autologin_register(login, email, "Ec#{login}2021#", 'educoder', user_info['mobile'])
|
|
Rails.logger.info("[OAuth2] reg_result -> #{reg_result}")
|
|
if reg_result[:message].blank?
|
|
open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: user_info)
|
|
successful_authentication(open_user.user)
|
|
else
|
|
tip_exception(reg_result[:message])
|
|
end
|
|
else
|
|
OpenUsers::Ci4s.create!(user: current_user, uid: user_info['username'], extra: user_info)
|
|
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
|