사용자가 자신의 프로필이 조회될 때 본인의 User ID를 확인할 수 있는 방법이 있을까요?
현재 ID는 관리자만 대시보드를 통해 확인할 수 있지만, 사용자가 자신의 ID를 공개적으로 표시할 수 있도록 하고 싶습니다.
관리자 설정, 컴포넌트 또는 플러그인을 통해 활성화할 수 있는 기능인가요?
알려주시면 감사하겠습니다!
사용자가 자신의 프로필이 조회될 때 본인의 User ID를 확인할 수 있는 방법이 있을까요?
현재 ID는 관리자만 대시보드를 통해 확인할 수 있지만, 사용자가 자신의 ID를 공개적으로 표시할 수 있도록 하고 싶습니다.
관리자 설정, 컴포넌트 또는 플러그인을 통해 활성화할 수 있는 기능인가요?
알려주시면 감사하겠습니다!
사용 사례는 무엇인가요? 왜 무작위 정수를 아는 것이 중요한가요?
@pfaffman 답변 감사합니다. UID는 불변(변경되지 않음)이므로, 사용자의 계정에 대해 영구적인 지문 역할을 할 수 있습니다. 사용자 이름은 변경될 수 있으므로, 지원 티켓을 통해 해당 사용자의 계정, 거래 내역, 인증 세션 등을 즉시 찾을 수 있습니다. UID는 위조할 수 없으며 영원히 고유합니다.
모든 새 사용자가 생성될 때마다 UID가 1씩 증가하도록 설정하고 싶습니다.
@Moin 답변 감사합니다. 도움이 많이 되었습니다. 네, Network → XHR → Response에서 응답을 확인할 수 있습니다. 완벽합니다. 하지만 사용자 계정 프로필에 UID를 표시하는 방법을 모르겠습니다. 이 위치에 표시하고 싶습니다: https://mydomain.com/u//preferences/account
하지만 create 컴포넌트 안에는 Before Header, After Header, Footer 옵션만 있습니다.
결국 제가 원하는 것은 다음과 같습니다.
JS를 사용하여 UID를 표시하는 방법에는 성공했지만, 메인 페이지 헤더에만 표시됩니다.
/my/preferences/account는 공개적이지 않으며, 다른 사용자는 이를 볼 수 없습니다. 그러나 사용 사례를 고려할 때, 사용자는 자신의 ID를 직접 확인할 수만 있으면 충분할 수 있습니다.
정보를 표시하려는 위치에 가까운 플러그인 아웃렛을 찾아야 합니다. 저는 일반적으로 개발자 도구 모음의 버튼을 사용하여 포럼에서 아웃렛을 표시합니다. 포럼 내에서 아웃렛을 확인하면 가장 적합한 아웃렛을 찾는 것이 훨씬 쉬워집니다. 아웃렛에 무언가를 표시하는 방법에 대한 자세한 내용은 https://meta.discourse.org/t/theme-developer-tutorial-1-introduction/357796에서 확인할 수 있습니다.
자, 모든 사람이 볼 수 있도록(공개) 하려면 다음 위치에 두면 됩니다: mydomain.com/u/<user>summary
브라우저 콘솔에서 enableDevTools()를 사용하면 **user-profile-secondary**가 좋은 위치가 될 것 같습니다.
이제 시도해 보겠습니다.
막혀 있습니다. 제가 보고 있는 사용자의 id를 어떻게 가져올 수 있을까요? api.getCurrentUser는 로그인된 사용자를 반환하거든요.
플러그인 아웃렛 header-contents__after에 사용자 ID를 넣었습니다.
Custom Components -- add button or text at any plugin outlet 은 플러그인 아웃렛이 있는 어디에나 텍스트를 붙이는 방법의 예시입니다. user_id에 접근하려면 직접 테마 컴포넌트를 만들어야 할 것 같습니다.
컴포넌트를 호출할 때 다음과 같이 하는 것이 좋겠습니다:
<YourIdComponent
@user={{@user}}
/>
그런데 코드를 사용하여 다른 사람의 user.id를 가져오는 방법은 무엇인가요?
위에서 @pfaffman 님이 게시한 내용을 참고하면, {{@user.id}}를 사용하는 컴포넌트를 만들 수 있습니다. Theme Developer Tutorial: 5. Building and using components 를 참고하세요. Discourse TC UI의 Edit CSS/HTML > JS에서 api.renderInOutlet()을 사용하면 될 것 같습니다.
네, api.renderInOutlet()이 정말 큰 도움이 됐습니다. 다만, 지금은 다른 방식으로 접근해서 더 이상 문제가 되지 않지만, 원래 문제는 보는 중인 프로필의 user.id를 어떻게 가져올지 몰랐다는 거였어요.
혹시 아이디어가 있으신가요?
답변은 다음과 같습니다. 하지만 배경 지식이 부족해서 이해하기 어려울 것 같습니다.
페이지를 보고 있는 사용자의 모델을 제공하는 아웃렛을 선택하는 것이 더 쉬울 것 같습니다.
선택한 아웃렛은 주제에 대한 정보는 제공하지만 사용자에 대한 정보는 제공하지 않습니다.
user-post-names와 같은 사용자 프로필의 아웃렛은 사용자 모델을 제공합니다:
모델을 제공하는 아웃렛이라면 https://meta.discourse.org/t/theme-developer-tutorial-4-using-outlets-to-insert-and-replace-content/357799의 예제처럼 @outletArgs를 사용할 수 있습니다. 거기의 예제는 @outletArgs={{lazyHash category=@model.category tag=@model.tag}}를 제공하는 discovery-list-container-top를 사용합니다.
그래서 저는 사용자 모델을 제공하는 아웃렛을 선택할 것입니다. 아웃렛에 마우스를 올려 보면 프로필을 보고 있는 사용자의 ID를 확인할 수 있습니다. 튜토리얼의 많은 예제에서는 현재 활동 중인 사용자의 ID를 제공하는 currentUser 서비스를 사용하는데, 이것은 당신이 찾고 있는 것과는 다릅니다.
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
api.renderInOutlet("user-post-names",
<template>
{{#if @outletArgs.model}}
<div class="uid-label-profile">
UID:
<span class="uid-value-profile">
{{ @outletArgs.model.id }}
</span>
</div>
{{/if}}
</template>
);
});
@Moin 님, 분석이 정확했습니다. 그대로 따랐더니 이제 모든 것이 완벽하게 작동합니다. 감사합니다.