Disable account confirm emails when creating users via API

사용자가 실제로 생성되었다면 user_id가 응답에 포함되어 있습니다. 하지만 관리자 대시보드에서 사용자를 찾을 수 없다는 점을 고려하면, 어떤 이유로든 사용자가 생성되지 않은 것으로 보입니다.

아, 그러시군요. 즉, 가져오기(importer)를 작성하고 계신 거죠. 하지만 이를 API 호출을 통해 수행하기보다는, 가져오기 스크립트를 작성하여 도커 컨테이너 내부에서 직접 실행하는 것이 좋습니다.

discourse/script/import_scripts at main · discourse/discourse · GitHub 에 나열된 수많은 예시 중 하나를 참고해 보시는 것을 추천합니다.

그 이유를 여쭤봐도 될까요?
(Discourse에는 관리자 권한이 있지만 서버/도커 컨테이너에는 접근 권한이 없어서, 그 부분은 다른 사람에게 요청해야 합니다.)

그렇네요! 그런 현상의 알려진 원인이 있나요? 설정 관련 문제가 있을까요?

대규모 가져오기(import)의 경우 100배 더 빠르며, 사용자를 생성하는 것은 물론 그룹, 카테고리, 주제, 게시글 생성 등 가져오기와 관련된 다양한 작업을 매우 쉽게 수행할 수 있는 ImportScripts::Base 클래스 메서드에 직접 접근할 수 있습니다:

필요하다면 스크립트를 작성해 두시고, 해당 스크립트를 실행해 달라고 요청하시면 됩니다.

이와 관련된 알려진 문제는 없습니다. 사용자를 생성하기 위한 curl 요청 예시는 다음과 같습니다:

curl -i -sS -X POST "http://localhost:3000/users" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: ****" \
-H "Api-Username: system" \
-F "name=cfbcc77ae9f4230d2c25" \
-F "username=cfbcc77ae9f4230d2c25" \
-F "email=cfbcc77ae9f4230d2c25@example.com" \
-F "password=3f348653105f05505f5f1a3ff70ef984" \
-F "active=true" \
-F "user_fields[1]=cfbcc77ae9f4230d2c25" \
-F "user_fields[2]=828c0ec3a76"

이 요청은 다음과 같이 반환됩니다:

{"success":true,"active":false,"message":"\u003cp\u003e거의 완료되었습니다! \u003cb\u003ecfbcc77ae9f4230d2c25@example.com\u003c/b\u003e으로 활성화 메일을 보냈습니다. 계정 활성화를 위해 메일의 지시를 따르세요.\u003c/p\u003e\u003cp\u003e도착하지 않는 경우 스팸 폴더를 확인해 보세요.\u003c/p\u003e","user_id":4}

사용자는 생성되고 있지만 이메일이 발송되는 것으로 보아 일부 변경 사항이 있는 것 같습니다. active=true가 적용되지 않는 것으로 보입니다.

솔직히 Ruby에 대해 아무것도 모른다는 점도 인정해야겠습니다 :man_facepalming:

그래서 API 문제를 조금 더 조사해 보겠습니다. 여러분과 유사한 호출을 실행해 볼 예정입니다. 몇 가지 확인하고 싶은 점이 있습니다:
a) 엔드포인트가 [mydomain]/users.json이 맞나요?
b) Content-Type은 API 문서에 적혀 있듯이 "multipart/form-data" 또는 "application/json"여야 하나요?
c) "user_fields"는 무엇에 사용되는 건가요?

네, 보통 모든 경로에 .json을 추가하는 것이 좋습니다. 네, 콘텐츠 유형으로 application/json을 사용할 수도 있고, 사용자 필드는 선택 사항입니다. 이미 가지고 있던 예제 스크립트의 일부였을 뿐입니다.

성공했습니다!

여러분의 curl 요청과 정확히 동일한 요청(제 데이터로)을 보냈더니 활성화된 사용자가 생성되었습니다.
처음에 Postman에서 유사한 요청을 보냈을 때 왜 작동하지 않았는지는 아직 정확히 알지 못합니다. 이 문제를 더 조사해 보겠습니다. 중요한 내용을 찾으면 여기서 보고드리겠습니다.

도와주셔서 감사합니다!

이 커밋으로 해결되었습니다: