API를 통해 단계별 사용자를 생성할 수 있나요?

두 개의 다른 Discourse 포럼에서 지정된 카테고리를 연결하기 위해 웹훅+API 브리지 서비스를 구축하는 아이디어를 검토 중입니다. 대략적인 개념은 다음과 같습니다:

  1. 각 서버에서 Topic 및 Post 이벤트에 대한 웹훅[1]
  2. 이러한 이벤트를 수신하여 API를 통해 반대편 서버에서 이벤트를 복제하는 리스너
    • 당연히 루프를 방지하는 것이 필요할 것[2]
    • 반대편 서버에 동일한 이메일 주소의 사용자가 있는지 확인[3]
    • 해당 사용자가 없으면 스테이징(staged) 사용자를 생성
    • 스테이징 사용자의 알림 설정을 변경하여 이메일 알림을 받지 않도록 설정[4]
    • 적절한 실제 사용자 또는 스테이징 사용자 아래에서 게시물을 생성하거나 업데이트
  3. 아마도 지정된 시간 루틴을 통해 주제를 순회하며 아무것도 누락되지 않았는지 확인하고, 양쪽이 일치하도록 순서를 다시 정하는 작업이 필요할 것입니다

사용자 상태, 역할 및 권한 이해하기에 따르면, 스테이징 사용자는 우리가 원하는 것을 기본적으로 수행할 것 같습니다. 나중에 누군가 해당 이메일 주소로 계정을 생성하면, 이를 "인수(claim)"하여 마치 처음부터 그곳에 있었던 것처럼 모든 게시물과 상호작용할 수 있기 때문입니다.

하지만, API를 통해 스테이징 사용자를 생성하는 방법이 있을까요? Discourse API Docs 에서 이를 찾을 수 없습니다.


  1. 또는 Like 및 Solved 이벤트도 포함할 수 있지만, 첫 단계에서는 제외 ↩︎

  2. 이 목록을 작성하기 전에 이 문제에 대해 반드시 생각했습니다 ↩︎

  3. 계정 시스템에 동일한 사용자명이 없을 수 있으므로 이메일 주소를 키로 사용 ↩︎

  4. 어딘가에서 이것이 가능하다는 게시물을 본 것 같습니다… ↩︎

이것이 원하시는 내용인지 확실하지 않습니다?

글쎄요, 어느 정도는 그렇습니다. 해당 토론의 원포스터(OP)가 그 답변에 대해 말하듯…

… 그리고 거기서 답변은 기본적으로 이메일을 주입(inject)하고 이메일 처리 코드가 그 일을 처리하도록 두는 것입니다. 하지만, 이 경우에는 작동하지 않습니다. 게시물을 생성하기 전에 사용자의 이메일 알림을 끄도록 개입해야 하기 때문입니다.

제안된 브리지의 _한쪽_에서 SSO-overrides-username이 켜져 있는 것으로 밝혀졌으므로, ‘othersite-user’ 같은 것을 만드는 것이 우회책이 될 수 있다고 생각합니다… 하지만 그 SSO 설정이 없으면 반드시 작동하지는 않을 것입니다.

관리자 사용자 생성 호출에 staged: true를 전달하는 것이 작동하지 않는다면, 이를 활성화하는 PR에 열려 있을 것입니다.

(개인적으로는 사용자의 사용 사례를 벗어난 다소 니치한 기능이라고 생각합니다.)

사용자를 가명으로 하여 가짜 이메일을 게시하기 위해 handle_mail 라우트를 사용할 수 있습니다. (@blake 님이 제안한 대로요)

이렇게 하면 필요한 경우 스테이징된 사용자와 주제를 동시에 생성할 수 있습니다.

이 접근 방식을 사용하면 사용자가 이메일을 통해 주제와 답변을 작성한 것처럼 보일 것입니다. 대기(staged) 상태의 사용자는 이메일을 통해서만 게시물을 작성할 수 있습니다. API를 통해 대기 상태 사용자에게 이메일이 아닌 게시물을 생성하려고 하면 액세스 권한 오류가 발생합니다.

대기 상태 사용자 접근 방식에 대해 뭔가 마음에 들지 않는 부분이 있습니다. 사용자들에게 조사를 해보아 우려 사항이 있는지 확인해 보는 것이 좋을 수도 있습니다. 사용자들의 허락을 받을 수 있다면, 미러 사이트에서 활성 상태의 대기하지 않은(active non-staged) 사용자를 생성한 후, API를 통해 그들의 주제와 댓글을 게시할 수 있습니다.

staged: true를 전달하면 대기 상태의 사용자가 생성됩니다. 이러한 방식으로 생성된 사용자는 이메일을 통해 게시물을 작성할 수 있을 것이라고 가정하고 있습니다. 제 로컬 개발 사이트는 Discourse로 이메일을 보내도록 구성되어 있지 않아, 현재 이를 테스트할 수 없습니다.

컨택트 폼을 처리하는 범용 폼 프로세서로 discourse를 사용해 보고 싶었습니다. 저는 컨택트 폼을 별로 좋아하지 않지만, 일부 사용자는 이메일을 보내는 것보다 컨택트 폼을 사용하는 것을 더 선호합니다. 그런 사람들이 잘못된 선택을 한다고 생각하더라도, 그들이 저에게 연락하고 돈을 지불할 수 있도록 더 쉽게 만들어 주고 싶습니다.

다른 시스템을 통해 폼을 처리하고 이메일을 보내는 대신, 스테이징된(staged) 사용자를 생성하는 메시지를 만들 수 있으면 정말 편리할 것 같습니다.

이를 위해 플러그인을 만들어야 할 것 같고, 그것이 제 계획입니다.

이것은 워드프레스를 제거하기 위해 제가 알아봐야 할 거의 유일한 남은 사항입니다.

그래서 플러그인에서 게시물을 이메일인 것처럼 생성하는 방식을 사용할 수도 있습니다. 플러그인에서 이를 구현하는 것은 그렇게 어렵지 않을 것입니다. 그리고 그렇게 하면 API를 통해 이를 가능하게 할 수 있을 것입니다.

Custom Wizard 플러그인을 사용하면 큰 어려움 없이 이를 달성할 수 있을 것 같습니다. 현재는 익명 마법사(anonymous wizards)를 사용할 수 있습니다. 도움이 필요하시면 기꺼이 도와드리겠습니다!

네, 이렇게 하면 됩니다: Creating a staged user with an API call - #8 by blake.

오! 당연하군요. 그게 메일 수신기가 메일을 전달하는 방식이군요. 어떤 폼에서든 임의의 필드를 받아서 토픽에 넣고 저에게 전달해 주는 엔드포인트를 만들고 싶습니다. 그러면 공개 API 키를 만들 필요가 없게 되니까요 (메일 전달에만 범위가 제한된 API 키라면, 자바스크립트로 폼을 처리한 후 기존 엔드포인트로 전달하는 방식이 그렇게 나쁘지 않아 보이거든요).