diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index ae4e83f24..682c5f2e3 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -26,6 +26,7 @@ class AccountsController < ApplicationController @user.gitea_token = result['sha1'] @user.gitea_uid = gitea_user['id'] if @user.save! + UserExtension.create!(user_id: @user.id) render_ok({user: {id: @user.id, token: @user.gitea_token}}) end else @@ -47,31 +48,54 @@ class AccountsController < ApplicationController user_mail = u.try(:mail) if u.present? - u.update_attributes(user_params) - u.user_extension.update_attributes(user_extension_params) + ue = u.user_extension + u.login = user_params["login"] if user_params["login"] + u.mail = user_params["mail"] if user_params["mail"] + u.lastname = user_params["lastname"] if user_params["lastname"] + u.password = user_params["password"] if user_params["password"] + + ue.gender = user_extension_params["gender"] + ue.school_id = user_extension_params["school_id"] + ue.location = user_extension_params["location"] + ue.location_city = user_extension_params["location_city"] + ue.identity = user_extension_params["identity"] + ue.technical_title = user_extension_params["technical_title"] + ue.student_id = user_extension_params["student_id"] + ue.description = user_extension_params["description"] + ue.save! + u.save! + + sync_params = {} + + if (user_params["mail"] && user_params["mail"] != user_mail) || (user_params["login"] && user_params["login"] != params[:old_user_login]) + sync_params = sync_params.merge(email: user_params["mail"], login_name: user_params["login"], full_name: user_params["login"]) + end + + if sync_params.present? + update_gitea = Gitea::User::UpdateService.call("", params[:old_user_login], sync_params) + Rails.logger.info("########________update_gitea__________###########__status:_#{update_gitea.status}") + end end - sync_params = {} - if user_params["mail"] && user_params["mail"] != user_mail - sync_params.merge(email: user_params["mail"]) - end - if user_params["login"] && user_params["login"] != params[:old_user_login] - sync_params.merge(username: user_params["login"]) - end - - sync_params = sync_params.compact - if sync_params.present? - admin_user = User.find(1) - update_gitea = Gitea::User::UpdateService.call(admin_user, sync_params) - Rails.logger.info("########________update_gitea__________###########__status:_#{update_gitea.status}") - end + render_ok({}) end rescue Exception => e uid_logger_error(e.message) tip_exception(-1, e.message) end + # 其他平台同步登录 + def remote_login + @user = User.try_to_login(params[:login], params[:password]) + if @user + successful_authentication(@user) + render_ok({user: {id: @user.id, token: @user.gitea_token}}) + else + render_error("用户不存在") + end + end + # 用户注册 @@ -162,7 +186,6 @@ class AccountsController < ApplicationController end successful_authentication(@user) - login_control.clear # 重置每日密码错误次数 # session[:user_id] = @user.id end @@ -208,6 +231,7 @@ class AccountsController < ApplicationController UserAction.create(:action_id => user.try(:id), :action_type => "Login", :user_id => user.try(:id), :ip => request.remote_ip) user.update_column(:last_login_on, Time.now) session[:"#{default_yun_session}"] = user.id + Rails.logger.info("#########_____session_default_yun_session__________###############{default_yun_session}") # 注册完成后有一天的试用申请(先去掉) # UserDayCertification.create(user_id: user.id, status: 1) end diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index b85b17a22..a389fa72d 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -21,6 +21,10 @@ module LoginHelper if edu_setting('cookie_domain').present? cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) end + Rails.logger.info("####_______token___________#### #{token}") + Rails.logger.info("####_______cookie_options__________#### #{cookie_options}") + Rails.logger.info("####_______autologin_cookie_name__________#### #{autologin_cookie_name}") + cookies[autologin_cookie_name] = cookie_options Rails.logger.info("cookies is #{cookies}") end @@ -40,13 +44,22 @@ module LoginHelper end def logout_user + Rails.logger.info("####################__11111______######") + if User.current.logged? + Rails.logger.info("####################__2222_______######") if autologin = cookies.delete(autologin_cookie_name) + Rails.logger.info("####################__33333______######") + User.current.delete_autologin_token(autologin) end + Rails.logger.info("####################__4444444______######") + User.current.delete_session_token(session[:tk]) self.logged_user = nil end + Rails.logger.info("####################__55555______######") + # 云上实验室退出清理当前session laboratory ||= (Laboratory.find_by_subdomain(request.subdomain) || Laboratory.find(1)) default_yun_session = "#{laboratory.try(:identifier).split('.').first}_user_id" @@ -58,6 +71,8 @@ module LoginHelper def logged_user=(user) # reset_session if user && user.is_a?(User) + Rails.logger.info("########________logged_user___________###########{user.id}") + User.current = user start_user_session(user) else @@ -78,6 +93,7 @@ module LoginHelper # # end # session[:user_id] = user.id + Rails.logger.info("########________start_user_session___________###########{user.id}") session[:"#{default_yun_session}"] = user.id session[:ctime] = Time.now.utc.to_i session[:atime] = Time.now.utc.to_i diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a2fb9e8bc..6c48d77b8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -109,11 +109,11 @@ class UsersController < ApplicationController end def user_params - params.require(:user).permit(:nickname, :lastname, :show_realname, + params.require(:user).permit(:nickname, :lastname, :show_realname,:login,:mail, user_extension_attributes: [ :gender, :location, :location_city, :occupation, :technical_title, - :school_id, :department_id] + :school_id, :department_id,:identity, :student_id, :description] ) end diff --git a/app/models/user.rb b/app/models/user.rb index 06bf6c94c..3a2083d29 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -201,7 +201,7 @@ class User < ApplicationRecord # # validations # - validates_presence_of :login, :if => Proc.new { |user| !user.is_a?(AnonymousUser) }, case_sensitive: false + # validates_presence_of :login, :if => Proc.new { |user| !user.is_a?(AnonymousUser) }, case_sensitive: false validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, case_sensitive: false validates_uniqueness_of :mail, :if => Proc.new { |user| user.mail_changed? && user.mail.present? }, case_sensitive: false # validates_uniqueness_of :phone, :if => Proc.new { |user| user.phone_changed? && user.phone.present? }, case_sensitive: false diff --git a/app/services/gitea/user/update_service.rb b/app/services/gitea/user/update_service.rb index d92bd7aeb..3650d3902 100644 --- a/app/services/gitea/user/update_service.rb +++ b/app/services/gitea/user/update_service.rb @@ -1,6 +1,6 @@ class Gitea::User::UpdateService < Gitea::ClientService - attr_reader :admin_user, :params - + # attr_reader :admin_user, :params + attr_reader :token, :old_login, :params # 只有管理员才能修改用户信息 # params: # admin boolean @@ -18,8 +18,10 @@ class Gitea::User::UpdateService < Gitea::ClientService # source_id integer($int64) # website string - def initialize(admin_user, params={}) - @admin_user = admin_user + def initialize(token, old_login, params={}) + @token = token + @params = params + @old_login = old_login end def call @@ -27,11 +29,12 @@ class Gitea::User::UpdateService < Gitea::ClientService end private + def url - "/admin/users/#{params[:login_name]}" + "/admin/users/#{old_login}" end def data_params - Hash.new.merge(token: admin_user.gitea_token, data: params) + Hash.new.merge(token: token, data: params) end end diff --git a/config/application.rb b/config/application.rb index f7d05dcd4..19276b5fd 100644 --- a/config/application.rb +++ b/config/application.rb @@ -33,6 +33,9 @@ module Educoderplus provider :cas, url: 'https://urp.tfswufe.edu.cn/cas' end + # config.middleware.use ActionDispatch::Cookies + # config.middleware.use ActionDispatch::Session::CookieStore + config.middleware.insert_before 0, Rack::Cors do allow do origins '*' diff --git a/config/routes.rb b/config/routes.rb index 4efeadbcc..42b8f85e1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -123,6 +123,7 @@ Rails.application.routes.draw do get :valid_email_and_phone post :remote_register post :remote_update + post :remote_login end end