parent
							
								
									610bc76ad7
								
							
						
					
					
						commit
						ad6821cf68
					
				@ -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