diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index 9170975b5..022f17ca7 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -7,8 +7,15 @@ class Api::V1::BaseController < ApplicationController skip_before_action :user_setup protected - def current_user - User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token + def current_user + #client方法对接,需要一直带着用户标识uid + if doorkeeper_token && doorkeeper_token.resource_owner_id.blank? + return User.anonymous if params[:uid].nil? + # tip_exception('缺少用户标识!') if params[:uid].nil? + User.current = User.find(params[:uid]) + else + User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token + end end def require_manager_above diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 452af0ad3..fb1968f28 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -250,7 +250,15 @@ class ApplicationController < ActionController::Base #Rails.logger.info("current_laboratory is #{current_laboratory} domain is #{request.subdomain}") if request.headers["Authorization"].present? tip_exception(401, "请登录后再操作!") unless valid_doorkeeper_token? - User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) if @doorkeeper_token.present? + if @doorkeeper_token.present? + # client方法对接,需要一直带着用户标识uid + if @doorkeeper_token.resource_owner_id.blank? + tip_exception(-1, "缺少用户标识!") if params[:uid].nil? + User.current = User.find(params[:uid]) + else + User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) + end + end else User.current = find_current_user uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index b43c1a46c..dc10c24f2 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -513,7 +513,7 @@ Doorkeeper::JWT.configure do # about the user. Defaults to a randomly generated token in a hash: # { token: "RANDOM-TOKEN" } token_payload do |opts| - user = User.find(opts[:resource_owner_id]) + user = User.find_by(id: opts[:resource_owner_id]) { iss: 'GitLink', @@ -523,9 +523,9 @@ Doorkeeper::JWT.configure do jti: SecureRandom.uuid, user: { - id: user.id, - login: user.login, - mail: user.mail + id: user&.id, + login: user&.login, + mail: user&.mail } } end