Discourse_api sync_sso custom_fields가 페이로드에 "custom.custom.<field>"로 나타나는 문제

DiscourseApi::SingleSignOn는 커스텀 속성이 다음과 같이 할당되기를 기대합니다.

sso.custom_fields['field_1'] = 'value'

# 이는 페이로드에 `custom.field_1` 키가 생성되도록 합니다

DiscourseApi::API::SSO.sync_sso()는 params가 다음과 같은 구조를 가질 것을 기대합니다.

{ 'custom.field_1' => 'value' }

하지만 custom. 접두사를 sso.custom_fields에 전달합니다.
이로 인해 페이로드에는 다음과 같은 키가 생성됩니다.

custom.custom.field_1

또한 sync_sso에 대한 과도한 테스트도 추가했습니다.

1개의 좋아요

IMO로는 이게 훨씬 더 간단했을 텐데, 기존 앱들이 깨지는 건 원치 않아서 :grimacing:. SSO 인스턴스 생성은 사용자한테 맡기면 좋겠어.

# frozen_string_literal: true
module DiscourseApi
  module API
    module SSO
      def sync_sso(sso)
        post("/admin/users/sync_sso", sso.payload)
      end
    end
  end
end

내일쯤은 이런 식으로(하지만 더 깔끔하게) 해볼까 해

# frozen_string_literal: true
module DiscourseApi
  module API
    module SSO
      def sync_sso(params)
        if params.instance_of?(DiscourseApi::SingleSignOn)
          post("/admin/users/sync_sso", sso.payload) 
        elsif params.instance_of?(Hash)
          .... 현재와 동일
        end
      end
    end
  end
end

생각은 어때? 내 앱은 이상적으로는 DiscourseApi::SingleSignOn을 생성하는 단일 함수를 가질 거고, 그걸 sso_login이나 sync_sso에 전달할 수 있게 되는 거야.

아니면 params를 이렇게 정의할 수도 있어

{
  sso_secret: ...
  name: ...
  custom_fields: {
    field_1: ...
  }
}

이것도 기존 앱들이 깨질 텐데.

2개의 좋아요

이 문제는 지난달에 수정되었습니다:

2개의 좋아요