单点登录test

sso^2
anke1460 5 years ago
parent f91fcc9751
commit 080026fe38

@ -49,6 +49,8 @@ gem 'rqrcode_png'
gem 'acts-as-taggable-on', '~> 6.0'
gem 'omniauth-cas'
group :development, :test do
gem 'rspec-rails', '~> 3.8'
end

@ -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

@ -29,6 +29,10 @@ module Educoderplus
# job
config.active_job.queue_adapter = :sidekiq
config.middleware.use OmniAuth::Builder do
provider :cas, url: 'http://localhost:3200'
end
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'

@ -8,8 +8,8 @@ Rails.application.routes.draw do
get 'attachments/download/:id/:filename', to: 'attachments#show'
get 'auth/qq/callback', to: 'oauth/qq#create'
get 'auth/failure', to: 'oauth/base#auth_failure'
get 'auth/cas/callback', to: 'oauth/cas#create'
resources :edu_settings
scope '/api' do
@ -26,7 +26,7 @@ Rails.application.routes.draw do
put 'commons/unhidden', to: 'commons#unhidden'
delete 'commons/delete', to: 'commons#delete'
resources :jupyters do
resources :jupyters do
collection do
get :save_with_tpi
get :save_with_tpm
@ -42,7 +42,7 @@ Rails.application.routes.draw do
post :import_with_tpm
end
end
resources :memos do
member do
post :sticky_or_cancel

Loading…
Cancel
Save