유니코드(러시아어) 사용자 이름 검증이 무작위로 실패합니다

러시아 문자가 포함된 사용자 이름(예: фыв)은 특정 문자에 따라 달라질 수 있지만, 때때로 검증에 실패합니다.

Ubuntu 19.10에서 최신 Chrome 및 Firefox로 테스트했으며, Discourse 버전은 2.4.0.beta8 (16de46f8d4)입니다.

이 3개의 문자에 대해 HTTP 요청은 항상 동일하며, DevTools 콘솔에서 여러 번 반복하여 재현할 수 있습니다:

fetch('/u/check_username?username=%D1%84%D1%8B%D0%B2&email=', {headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(r => r.json()).then(console.log)

유니코드 화이트리스트를 [йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ]로 설정해 보았지만 효과가 없었습니다.

@gerhard 여기서 무슨 일이 일어나고 있는지 혹시 알 수 있을까요? 우리의 러시아어 정규식이 잘못된 건가요?

문제를 재현할 수 없습니다. "숫자, 문자, 대시, 마침표, 밑줄만 포함할 수 있습니다"라는 오류 메시지가 표시될 때, 보이지 않는 공백이나 비슷한 것을 입력하셨을 가능성이 있을까요?

사용자 이름 확인은 서버에서 실행되므로, 정규식에 문제가 있었다면 동일한 입력에 대해 항상 동일한 결과가 생성되어야 합니다.

2개의 좋아요

네, 그래서 이상한 거예요.

종류의 레이트 리미팅(rate limiting)과 관련이 있을 것 같다고 생각했지만, 긴 대기 시간(2분) 후에도 첫 번째 요청에서 오류가 발생했고, 몇 초 후 세 번째 요청에서는 성공했습니다.

위 코드를 DevTools에서 실행하면 재현할 수 있습니다.

아직도 문제를 재현하지 못했습니다. unicode usernames 사이트 설정을 비활성화했다가 다시 활성화해 볼 수 있을까요? 유니콘 워커가 설정이 변경되었음을 인지하지 못했을 수 있습니다. 그렇게 되면 일부 요청에서만 오류가 발생하는 이유를 설명할 수 있습니다. 그래도 해결되지 않으면 앱 컨테이너를 다시 빌드해 보세요.

2개의 좋아요

도움이 되지는 않았지만, 네, 제 로컬 Docker 인스턴스에서도 재현할 수 없었습니다. 그리고 Discourse를 업그레이드할 때 재시작 후 문제가 사라진 것으로 보입니다.

참고로 러시아 문자를 화이트리스트에 추가하는 더 간단한 방법을 찾고 있다면, 이 정규식이 작동하는 것 같습니다: [\p{Cyrillic}]

1개의 좋아요