개인 메시지가 있는 사용자를 삭제할 수 없음, 오해의 소지가 있는 오류 메시지

저희는 SSO를 사용하고 있으며, 사용자가 계정을 삭제하면 API를 통해 해당 사용자의 Discourse 계정도 함께 삭제(또는 게시물이 있는 경우 익명화)하고 있습니다.

하지만 이 과정에서 403 에러가 몇 번 발생하고 있어 문제가 있는 것 같습니다. 조금 더 조사해 보니, API 호출 시 반환되는 에러 메시지가 다음과 같았습니다:

{
    "http_code": 403,
    "body": "{\"deleted\":false,\"message\":\"User XXX has 0 posts, so they can't be deleted.\"}"
}

글쎄요, 게시물이 0개라면 삭제가 가능해야 하지 않나요? 해당 계정의 정보를 확인해 보니 실제로 게시물이 없었습니다:

하지만 Discobot(튜토리얼)에게 보낸 개인 메시지는 있었습니다.

따라서 여기에는 몇 가지 문제가 있는 것 같습니다:

  1. 사용자 삭제를 거부한 에러 메시지는 공개 게시물만 집계하고 있는 것 같습니다. 하지만 개인 메시지(비공개 게시물)도 포함해야 하는 것 아닌가요?
  2. 실제로 개인 메시지가 계정의 삭제를 막아야 하는 것일까요? 공개 주제에서 계정을 삭제할 때 서사가 복잡해질 수 있다는 논리는 이해합니다. 하지만 개인 메시지의 경우, 그 논리가 그렇게 타당하지는 않을 수도 있지 않을까요?
  3. 만약 앞선 질문에 대한 답이 여전히 '예’라면(즉, 개인 메시지가 계정의 삭제를 막아야 한다면), Discobot에게 보낸 메시지도 계정 삭제를 막는 요인으로 집계되어야 하는 것일까요? 대부분의 사용자는 튜토리얼을 진행하면서 Discobot에게 개인 메시지를 보내게 되는데, 이는 튜토리얼만 진행했을 뿐 실제 참여 기록이 없는 많은 계정을 삭제하는 것을 사실상 불가능하게 만듭니다(이는 아마 delete_user_max_post_age일 이후에만 해당될 수 있지만, 여전히 문제입니다).

마지막으로, 이것이 1번과 관련이 있는지 확실하지는 않지만, 이 사용자의 API 정보를 확인해 보면 다음과 같이 반환됩니다:
post_count: 0
can_be_deleted: 1
can_delete_all_posts: 0

하지만 실제로는 이 사용자를 삭제할 수 없습니다. 그렇다면 can_be_deleted 로직 역시 공개 게시물만 집계하고 있는 것은 아닌지 의문이 듭니다.

4개의 좋아요

훌륭한 탐문이었네요! 최소한 에러 메시지는 수정해야 합니다.

"body": "{\"deleted\":false,\"message\":\"User XXX has 0 posts, so they can't be deleted.\"}"

아래와 같이 표시되어야 합니다.

User has x post(s), so they can't be deleted.

이 문제가 꽤 자주 발생했으므로 상황을 암시하는 내용도 추가하는 것이 좋겠습니다.

User has x posts(s), either public posts or personal messages, so they can't be deleted

3개의 좋아요

완료했습니다. 메시지에 포함된 잘못된 게시물 수도 함께 수정했습니다.

4개의 좋아요

@vinothkannans 님, 감사합니다! :+1:

can_be_deleted가 실제로 삭제할 수 없는 계정(개인 메시지 때문에)에 대해 삭제 가능하다고 표시되는 문제도 함께 확인해 주실 수 있을까요? 현재는 can_be_deleted를 신뢰할 수 없어, 먼저 사용자 삭제를 시도하고 실패 시 익명화(anonymize)로 폴백 처리하고 있습니다.

2개의 좋아요

다음 주제에서 언급된 문제가 이 주제에서 논의 중인 문제와 어떤 방식으로든 관련이 있을까요?

2개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 더 이상 새 답변을 작성할 수 없습니다.