사용자 ID로 사용자 프로필에 링크를 걸려면 어떻게 해야 하나요?

애플리케이션 데이터베이스에 멤버 테이블이 있습니다. 이 테이블에는 멤버 중 일부에 대한 애플리케이션 관련 정보를 저장하고 있습니다. 그중 한 컬럼이 discourse_user_id입니다. 멤버의 디스커스 프로필로 연결되는 링크를 렌더링하고 싶은데, 사용자 ID만으로 이것이 가능한지 궁금합니다.

discourse_user_name을 저장하지 않는 이유는 사용자가 이름을 변경할 수 있기 때문에, 변경 시 동기화를 유지해야 하는 문제가 생기기 때문입니다.

현재 제가 떠올릴 수 있는 유일한 방법은 /admin/users/<user-id>.json에 API 요청을 보내서 사용자 이름을 가져오는 것입니다. 하지만 멤버 목록에 프로필 링크를 함께 표시하는 인덱스 페이지에서 이렇게 많은 요청을 보내는 것은 부담이 될 것입니다.

마음에 떠오르는 다른 방법은 라우트를 추가하는 플러그인을 만드는 것인데, 이는 제가 처음 이런 질문을 하는 사람이 아닐 텐데도 불구하고 너무 많은 노력으로 느껴집니다. 그래서 이미 다른 해결책이 있는지 확인하고 싶었습니다.

한 가지 아이디어는 사용자 기록에 외부 ID를 넣고, 이를 통해 /by-external/:external_id 경로를 사용하는 것입니다. 다른 방법으로는 사용자가 사용자 이름을 변경할 때 외부 데이터베이스에 알리기 위해 웹훅을 사용하는 것입니다. 또 다른 방법은 사용자 이름 변경 기능을 단순히 비활성화하는 것입니다. discourse/config/routes.db 파일을 빠르게 살펴본 결과, user_id를 사용하는 경로를 찾지 못했습니다.

@pfaffman님, 감사합니다. 매우 유용한 정보네요. 외부 ID를 사용하는 것이 이상적이라고 생각합니다. 이렇게 하면 역방향 링크라는 또 다른 문제도 해결할 수 있기 때문입니다.

하지만 API 문서와 REST 클라이언트를 살펴봐도 해당 필드를 업데이트하는 방법을 찾을 수 없습니다. SSO를 활성화하지 않고도 이 기능을 사용할 수 있을까요? (그리고 SSO를 활성화하더라도 프로그래밍 방식으로 업데이트할 수 있을까요?)

죄송합니다, 바로 알지 못합니다. 소스 코드를 직접 확인해 봐야 할 것 같습니다.

외부 키를 업데이트할 이유는 없습니다. 키는 변경되지 않아야 하니까요.

또 다른 방법으로는 두 시스템 모두 이메일 주소가 동일하다고 가정하도록 하는 것입니다.

제 추측으로는 SSO를 사용하시는 것이 좋을 것 같습니다.

다음과 같이 시도해 볼 수 있습니다:

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

다른 곳에 문서화된 대로 API 키를 헤더로 전달해야 합니다.

이 기능을 활성화하기 위해 플러그인을 만들었습니다:

/user-by-id/123/summary가 /u/janedoe/summary 등으로 리다이렉트됩니다.

아직도 이런 작업을 직접 해야 한다는 사실이 놀랍지만, 적어도 작동은 합니다!