API로 사용자 필드 변경하는 방법

(수정: 솔루션은 2번째 게시글을 참고하세요: API로 사용자 필드 변경하는 법)

@sam님, 폐쇄된 주제 내 게시글에서 사용자 기록의 사용자 지정 필드를 API로 업데이트하고 싶었던 누군가에 대해 언급하신 부분이 있었습니다. "해당 필드는 화이트리스트에 등록되어 있어야 합니다. /admin/customize/user_fields에 추가할 수 있나요, 아니면 이 필드는 사용자에게 완전히 숨겨져야 하는 건가요?"라고요.

간단한 질문 두 가지입니다.

  1. /admin/customize/ 엔드포인트는 무엇인가요?
  2. 필드를 "화이트리스트"에 등록하는 방법은 무엇인가요? (그것이 무엇을 의미하는 건가요 – API가 접근할 수 있도록 화이트리스트에 등록하는 건가요?!)

두 질문에 대한 답을 찾아보았지만 실패했습니다. 혹시 (또는 다른 누구라도) 알려주시면 감사하겠습니다.

참고로 제 최종 목표는 단순해 보입니다: API를 통해 사용자 지정 사용자 필드의 값을 설정/검색하고 싶습니다. 그런데 이 방법을 명확하게 알려주는 답변을 얻는 것이 incredibly 어렵다는 것을 발견했습니다. :frowning:

지금까지 파악한 내용은 다음과 같습니다:

  1. SSO를 통해 사용자 지정 필드를 전달할 수는 있지만, 그것은 API가 아닙니다.
  2. 프론트엔드가 API를 호출할 때(XHR 요청을 관찰하여 확인), 사용자 지정 필드는 이름이 아닌 번호로만 참조되는 것 같습니다. - 만약 제가 이름으로 찾으려 한다면 분명 큰 차이가 있지만, 실제로는 users[2]인 것이죠.

보시는 바와 같이, 이것이 자명하지 않다는 것을 알 수 있습니다 :wink: 그리고 'get’은 'set’보다 쉽다고 생각합니다. 왜냐하면 그것은 이제 API로 가져올 수 있는 사용자 기록의 일부일 테니까요. 하지만 API로 'set’할 수 있을 때까지는 확인할 수 없습니다.

어쨌든… 마침내 이 문제를 해결하게 되면, 이 지식을 다음에 이 작업을 시도하는 사람에게 도움이 될 수 있는 방식으로 어떻게 기여할 수 있을까요?

API를 통해 user_fields[1]을(를) 다음과 같이 전달하여 커스텀 필드가 있는 사용자를 생성할 수 있습니다:

curl -i -sS -X POST "http://localhost:3000/users"  \
-H "Content-Type: multipart/form-data;"  \
-H "Api-Key: d19b5a38ed13745f4c5..."  \
-H "Api-Username: system"  \
-F "name=cbbc7188c201b59ebc06"  \
-F "username=cbbc7188c201b59ebc06"  \
-F "email=cbbc7188c201b59ebc06@example.com"  \
-F "password=b6629ed30b4bc3de32ce452d171540b0"  \
-F "active=true"  \
-F "approved=true"  \
-F "user_fields[1]=a874d830b60"  \
-F "user_fields[2]=732418b131b"

/u/<username>.json으로 PUT 요청을 보내면 이를 업데이트할 수 있습니다.

/admin/customize/user_fields는 사용자 정의 사용자 필드를 설정하는 UI 페이지입니다.

이렇게 많은 도움을 주셔서 감사합니다! 참고로, user_fields를 이름으로 참조할 수 있는 기능이 있다면 좋겠습니다(훨씬 더 견고해 보이거든요?). 하지만 제공해 주신 설명과 정보는 정말 큰 도움이 됩니다. 감사드립니다 :slight_smile:

_사용자 업데이트_에도 동일한 POST 엔드포인트를 사용합니까? 모든 필드가 필수적인가요?

안녕하세요! user_fields의 인덱스를 어떻게 가져오는지 알고 싶습니다. 웹 컨트롤러로 가서 인덱스를 가져와야 하나요? user_fields를 가져오기 위한 API가 있나요? 그러면 인덱스를 가져올 수 있을 것 같습니다. 감사합니다.

/admin/customize/user_fields로 GET 요청을 보내면 사용자 필드 목록이 반환됩니다:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Favorite OS",
      "description": "What is your favorite Operating System?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}

감사합니다. 답변이 정말 많이 도움이 됩니다!