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() 期望参数包含:

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

但它将 custom. 前缀传递给了 sso.custom_fields
这导致负载中出现了:

custom.custom.field_1

此外,还为 sync_sso 添加了一些过度测试。

1 个赞

我觉得这样会简单得多,但我不想破坏现有的应用 :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_loginsync_sso

或者参数可以这样定义:

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

但这同样会破坏现有的应用。

2 个赞

上个月已针对此问题进行了修复:

2 个赞