parent
f91fcc9751
commit
080026fe38
@ -0,0 +1,13 @@
|
||||
class Oauth::CasController < Oauth::BaseController
|
||||
def create
|
||||
user, is_new_user = Oauth::CreateORFindCasUserService.call(current_user, auth_hash)
|
||||
successful_authentication(user)
|
||||
|
||||
render_ok(new_user: is_new_user)
|
||||
end
|
||||
|
||||
|
||||
def auth_hash
|
||||
request.env['omniauth.auth']
|
||||
end
|
||||
end
|
@ -0,0 +1,9 @@
|
||||
class OpenUsers::Cas < OpenUser
|
||||
def nickname
|
||||
extra&.[]('nickname')
|
||||
end
|
||||
|
||||
def en_type
|
||||
'cas'
|
||||
end
|
||||
end
|
@ -0,0 +1,32 @@
|
||||
class Oauth::CreateORFindCasUserService < ApplicationService
|
||||
|
||||
def initialize(user, params)
|
||||
@user = user
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
return [@user, false] if @user
|
||||
|
||||
open_user = OpenUsers::Cas.find_or_initialize_by(uid: @params.info['email']) do |u|
|
||||
u.extra = @params.info
|
||||
end
|
||||
|
||||
return [open_user.user, false] if open_user.persisted?
|
||||
|
||||
@user = User.new(login: User.generate_login('C'), type: 'User', status: User::STATUS_ACTIVE)
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
gender = @params.dig('extra', 'raw_info', 'xb') == '女' ? 1 : 0
|
||||
@user.save!
|
||||
@user.create_user_extension!(gender: gender)
|
||||
|
||||
open_user.user = @user
|
||||
open_user.save!
|
||||
|
||||
Rails.cache.write(open_user.can_bind_cache_key, 1, expires_in: 1.hours)
|
||||
end
|
||||
|
||||
[@user, true]
|
||||
end
|
||||
end
|
Loading…
Reference in new issue