API 버그: 사용자 이름의 마침표가 오류를 유발합니다

우리는 pydiscourse를 통해 Discourse를 사이트에 통합하기 위해 API를 사용하고 있습니다.

API를 통해 Discourse 그룹에 사용자를 추가할 때, pydiscourse는 Discourse API URL에 PUT 메서드를 사용합니다:

/admin/groups/{group_id}/members.json

…그리고 ‘usernames’ 변수를 통해 사용자 이름을 전달합니다.

사용자 이름에 "."가 포함되어 있으면 문제가 없지만, "."가 마지막 문자로 나타나는 경우를 제외합니다. 이 경우 API는 다음과 같은 메시지와 함께 오류를 반환합니다:

You supplied invalid parameters to the request: usernames

사용자 이름은 마침표로 끝날 수 없으므로, 이는 예상되는 응답입니다. 소스 코드를 확인하려 했으나, 여기에서 뒤에 마침표를 붙인 사용자 이름으로 계정을 생성해 보시면, 이는 허용되지 않는다는 것을 직접 확인하실 수 있습니다.

빠른 답변 감사합니다, 제이. 해당 API 엔드포인트에서 ‘username’ 필드에 사용자의 이메일 주소를 보내면, Discourse가 이메일로 사용자를 조회하도록 처리되는지 혹시 알고 계신가요? (우리는 Django 앱을 Discourse에 연결하기 위해 SSO를 사용하므로, Discourse에는 각 사용자의 두 가지 식별자가 모두 있어야 합니다)

아, 네, 알고 있습니다. 며칠 전에 사용자 그룹 추가 엔드포인트에 이메일 주소를 사용할 수 있다는 것을 알아차렸어요. 비관리자 경로였을 수도 있습니다. 그냥 email을 필드 이름으로 지정하고 주소를 포함하면 됩니다.

다만, Discourse connect를 사용 중이라면 로그인 시 그룹을 관리할 수 있는데, 이는 API를 직접 다루는 것보다 훨씬 원하시는 방식일 가능성이 높습니다.

후속 답변 감사합니다.

저희는 Discourse Connect를 사용하지만, API도 함께 사용하고 있습니다.

참고로, It might have been the non-admin route, though라고 언급하셨는데,

그 PUT 요청은 다음과 같습니다:

/groups/{group_id}/members.json

…페이로드에 'email': (사용자 이메일)을 포함하면, Discourse가 해당 사용자를 해당 그룹에 추가할 수 있도록 내 사용자가 관리자 권한을 가진다는 사실을 알아맞히는 건가요?

(…이 동일한 작업에 대해 두 가지 라우트가 있는 이유가 무엇인지 정확히 이해가 안 돼서 죄송합니다…)

그렇다고 생각합니다. 경로를 파악하기 위해 Discourse API 역공학하기를 참고했고, 그 다음 소스 코드를 살펴보니 사용자 ID와 이메일 주소도 작동한다는 것을 알게 되었습니다.

네, SSO는 로그인 시에만 그룹을 업데이트하므로 API가 해결책입니다.