이 문제를 재현할 방법을 아직 찾지 못했지만, 지난 한 달 동안 사용자가 비활성화되었어야 할 것 같지만 실제로는 비활성화되지 않은 경우(스태프 작업 로그에서 확인 가능)가 두 번 있었습니다. (해당 사용자는 여전히 로그인할 수 있었습니다.)
예를 들어, 이 사용자는 29일 전에 "비활성화"되었는데, 오늘 저에게 개인 메시지를 보낼 수 있었습니다. (비활성화 이후의 다른 스태프 작업은 "이메일 확인"뿐입니다.)
다음은 다른 사례입니다. (다른 스태프가 이전에 재활성화되지 않은 상태에서 4시간 후 같은 사용자를 다시 "비활성화"할 수 있었습니다.)
현재 2.9.0.beta9 버전을 사용하고 있습니다.
이 문제는 아직 진행 중입니다(한 달에 여러 번 발생합니다). 다른 분들도 이 문제를 경험해 보셨나요?
다음은 컨트롤러 코드입니다.
reviewable.perform(current_user, :approve_user, allow_reviewed: true)
render body: nil
end
def approve_bulk
Reviewable.bulk_perform_targets(
current_user,
:approve_user,
"ReviewableUser",
params[:users],
allow_reviewed: true,
)
render body: nil
end
def activate
guardian.ensure_can_activate!(@user)
# ensure there is an active email token
if !@user.email_tokens.active.exists?
@user.email_tokens.create!(email: @user.email, scope: EmailToken.scopes[:signup])
end
StaffActionLogger는 올바르게 작동하고 있지만, User.deactivate 메서드에서 무언가 실패하고 있는 것은 아닌지 궁금합니다.
오류들의 공통점은 API 요청에서 발생한다는 것입니다. 일반적으로 저는 다음을 사용합니다:
PUT https://<MY_SITE>/admin/users/<USER_ID>/deactivate
Api-Username:<ADMIN_USER>
Api-Key:<KEY>
data: {context:"/admin/users/<USER_ID>/<USER_NAME>"}
항상 "success: OK"가 반환됩니다.
확인해 볼 수 있는 다른 로그나 시도해 볼 수 있는 방법이 있을까요?
현재 2.9.0.beta11 버전을 사용하고 있습니다.
이 문제가 여전히 간헐적으로 발생하고 있습니다. 예를 들어, 해당 사용자는 8월 23일에 처음 "비활성화"되었지만, 방금 확인해 보니 여전히 활성 상태였고, 실제로 비활성화 처리를 했습니다.
사용자가 어떻게 두 번 비활성화될 수 있는 것일까요(그 사이에 재활성화가 없는 경우)?
저는 이 상황을 확인하기 위해 쿼리를 실행하는 일일 작업을 설정해 두었습니다. 어제 이 작업은 아무것도 반환하지 않았고, 오늘은 이 한 명의 사용자만 반환했습니다. 따라서 사용자가 8월 23일에 올바르게 비활성화되었지만, 어딘가에 기록되지 않은 채로 어젯밤에 어떻게든 다시 활성화된 것으로 보입니다.
사용자를 활성화(API 또는 UI를 통해)하면서 흔적을 남기지 않는 것이 가능한가요? 이는 데이터베이스를 직접 수정할 때만 발생할 수 있을 것으로 추측하는데, 저는 그런 행위를 하지 않았다고 확신합니다(저는 유일한 관리자입니다).
simon
9월 23, 2024, 6:08오전
5
이러한 일이 발생할 수 있습니다. 비활성화된 사용자가 계정을 다시 활성화하려면 사이트 로그인 시도를 한 후, 사용자에게 전송되는 활성화 이메일의 링크를 클릭하기만 하면 됩니다.
비활성화된 사용자가 로그인하려고 하면 다음과 같은 모달이 표시됩니다:
Discourse는 해당 사용자에게 “새 계정 확인” 이메일을 전송합니다:
이메일의 링크를 클릭하면 사용자가 Discourse에 로그인됩니다.
제가 기억하는 한 이 동작은 항상 그랬습니다. 이는 버그라고 생각하지는 않지만, 제가 틀렸을 수도 있습니다. 이미 계정이 있는 사용자에게 “새 계정 확인” 이메일을 보내는 것은 다소 이상해 보입니다.
수정: 원하시는 동작을 얻으려면 사용자를 비활성화하는 대신 "정지(suspend)"하는 것이 좋습니다.
미스터리가 해결되었습니다! 시몬, 감사합니다. 이 스레드를 닫으셔도 됩니다.