gitlink-forgeplus/app/controllers/oauth/ci4s_controller.rb

54 lines
1.8 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
result = Ci4s::Service.access_token(code)
Rails.logger.info("[OAuth2] result -> #{result}")
# 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