FastComments.com

맞춤 설정 및 구성

사용자 지정 및 구성

컨텍스트

여기에서는 댓글 위젯이 지원하는 각 기능 및 설정에 대한 심층 문서를 찾을 수 있습니다.

이 문서에서는 핵심 개념을 다루고, 사용 방법과 각 기능 영역별로 알아야 할 주의사항까지 깊이 있게 설명합니다.

관련 줄이 강조된 코드 예제가 제공됩니다. 해당되는 경우 구성 페이지의 스크린샷도 제공됩니다.

코드 예제는 당사의 바닐라 JavaScript 라이브러리를 사용하지만, 구성 옵션은 모든 댓글 위젯 버전(React, Vue 등)에서 정확히 동일한 이름을 사용합니다.

이 가이드에 설명된 대부분의 구성 및 기능은 코드를 작성할 필요가 없습니다.

다른 페이지에 동일한 댓글 표시 Internal Link

urlId 매개변수는 댓글이 연결될 페이지(또는 ID)를 정의할 수 있게 해주므로, 해당 페이지들에서 urlId를 같은 값으로 설정하면 됩니다.

The Same Comments on Multiple Pages
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "urlId": "https://example.com/source-page"
8}];
9</script>
10

맞춤 글꼴 Internal Link

FastComments는 사용자 맞춤형으로 설계되었으며, 위젯에서 사용하는 글꼴도 예외는 아닙니다.

기본적으로 FastComments는 가능한 한 다양한 기기에서 보기 좋게 표시되도록 system font stack을 사용합니다.

자신의 글꼴을 정의하려면 맞춤 CSS 문서를 참조하세요.

해당 문서에서는 원하는 글꼴을 지정할 수 있는 맞춤 CSS 정의 방법을 확인할 수 있습니다.

글꼴을 정의하는 방법

글꼴을 재정의하려면 .fast-comments, textarea 선택자를 사용하여 CSS를 정의하는 것을 권장합니다. 예:

커스텀 외부 폰트 예제
Copy CopyRun External Link
1
2@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap');
3.fast-comments, textarea {
4 font-family: 'Roboto', sans-serif;
5}
6

다크 배경 지원 (다크 모드) Internal Link

기본적으로 FastComments 댓글 위젯은 대부분의 사이트에서 다크 모드를 자동으로 감지합니다.

다크 모드가 감지되면 FastComments는 흰 배경의 검은색 텍스트에서 검은 배경의 흰색 텍스트로 전환합니다. 이미지도 변경됩니다.

페이지 로드 시, 위젯은 댓글 위젯 뒤에 있는 페이지 배경이 얼마나 어두운지를 판단하려고 시도합니다. 이는 페이지가 흰 배경일 수 있지만, 댓글 위젯을 검은색 배경의 컨테이너 안에 넣으면 댓글을 읽기 쉽게 하기 위해 다크 모드가 여전히 자동으로 활성화되어야 함을 의미합니다.

그러나 "휘도(luminance)"를 결정하는 방식에 의존하는 감지 메커니즘은 원할 때 다크 모드를 활성화하지 않을 수 있습니다. 강제로 활성화하려면 hasDarkBackground 플래그를 다음과 같이 true로 설정하십시오:

Force Dark Background Mode
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "hasDarkBackground": true
8}];
9</script>
10

댓글에서 페이지로 연결 Internal Link

알림 이메일을 보내거나 관리 페이지와 같은 사용자 인터페이스에서 댓글을 렌더링할 때, 댓글에서 해당 댓글이 달린 페이지로 연결할 수 있으면 유용합니다.

URL ID가 항상 ID가 아니라면, URL을 다른 곳에 저장해야 합니다. 그것이 바로 "url" 속성의 용도이며, 다음과 같이 정의됩니다.

사용자 정의 URL 정의
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "url": "https://example.com/article-5"
8}];
9</script>
10

일반적인 사용 사례는 댓글 스레드를 게시글과 같은 식별자에 연결한 다음, 특정 페이지로 다시 연결하는 것입니다. 예를 들면:

사용자 정의 URL과 URL ID 함께 정의
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "url": "https://example.com/article-5",
8 "urlId": "article-5"
9}];
10</script>
11

URL은 일반적인 마케팅 매개변수가 제거되지 않습니다. 기본적으로 현재 페이지 URL이 그대로 댓글과 함께 저장되는 URL이 됩니다.

렌더링할 페이지 결정 Internal Link

댓글을 가져오고 렌더링할 때, 댓글 위젯은 어느 페이지에서 시작할지 알아야 합니다. 기본적으로는 시작 페이지로 첫 번째 페이지만 렌더링합니다.

원한다면, 렌더링할 정확한 페이지를 설정 startingPage로 댓글 위젯에 전달할 수 있습니다.

Specifying The Page to Render
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "startingPage": 1
8}];
9</script>
10

페이지 번호는 0부터 시작한다는 점에 유의하세요. 따라서 위의 예제는 두 번째 페이지를 렌더링합니다.

페이지를 새로 고치지 않고 댓글 스레드 전환 Internal Link

우리는 urlId가 댓글이 연결되는 페이지 또는 게시물의 ID라는 것을 다뤘습니다.

또한 요약하면, 정의되지 않으면 urlId는 현재 페이지 URL로 기본값이 설정됩니다.

페이지나 콘텐츠가 전체 페이지 리로드 없이 동적으로 변경되는 SPA(싱글 페이지 애플리케이션)의 경우는 어떨까요?

Angular, React, Vue 등

Angular 및 React와 같은 라이브러리를 사용하는 경우, 위젯에 전달되는 urlId 속성을 단순히 업데이트하면 댓글 위젯이 새로고침됩니다. 예를 들어 React 앱에서 동작하는 모습을 여기에서 확인할 수 있습니다.

VanillaJS

VanillaJS 라이브러리를 사용하고 있다면, 데이터 바인딩이나 상태 전파를 처리해 주는 Angular나 React 같은 프레임워크가 없기 때문에 약간 더 복잡합니다.

VanillaJS 위젯을 인스턴스화하면, 이를 업데이트할 수 있는 몇 가지 함수들이 반환됩니다.

다음은 페이지 해시를 변경하고 댓글 위젯을 업데이트하는 작동 예제입니다:

페이지 해시 전환 예제
Copy CopyRun External Link
1
2<script src="https://cdn.fastcomments.com/js/embed-v2.min.js"></script>
3<button id="change-page"></button>
4<div id="fastcomments-widget"></div>
5<script>
6 (function fastCommentsMain() {
7 let config = {
8 tenantId: 'demo'
9 };
10 let instance = window.FastCommentsUI(document.getElementById('fastcomments-widget'), config);
11
12 let page = '#page-1';
13 function getNextPage() {
14 if (page === '#page-1') {
15 return '#page-2';
16 } else {
17 return '#page-1';
18 }
19 }
20
21 let button = document.getElementById('change-page');
22 function nextPage() {
23 page = getNextPage();
24 button.innerText = 'Go to ' + getNextPage();
25 window.location.hash = page;
26 let locationString = window.location.toString();
27
28 config.url = locationString; // We update url, too, so notifications can link back to the right page
29 config.urlId = locationString;
30
31 instance.update(config);
32 }
33 nextPage();
34 button.addEventListener('click', nextPage);
35 })();
36</script>
37

이미지 리다이렉트 비활성화 Internal Link

기본적으로 FastComments는 사용자가 이미지를 업로드할 수 있도록 허용합니다. 사용자가 그 이미지를 클릭하면, FastComments는 기본적으로, 새 탭을 열어 해당 이미지를 전체 보기로 표시합니다. 이 플래그를 true로 설정하면 이 동작이 비활성화됩니다:

Disable Image Redirect
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "disableImageRedirect": true
8}];
9</script>
10

이미지 클릭을 직접 캡처할 계획이 없다면 (참조: onImageClicked), 이 동작을 일부 스타일과 결합하는 것을 권장합니다 이미지가 클릭 가능한 것처럼 보이는 외관을 제거하기 위해.

새 댓글 강조 Internal Link

FastComments는 새 댓글을 강조하는 여러 가지 방법을 제공합니다.

무엇보다도, 기본적으로 인앱 알림을 트리거한 댓글(답글, 같은 스레드 내 답글, 또는 구독 중인 페이지의 댓글)은 사용자의 아바타가 살짝 빛나는 방식으로 자동으로 강조됩니다. 이 색상은 is-unread 클래스를 사용하여 CSS를 통해 사용자 지정할 수 있습니다.

지난 24시간 동안 게시된 댓글에는 스타일링에 사용할 수 있는 24hr 클래스가 적용됩니다.

마지막으로, 사용자의 세션 중에 나타나는 새로운 실시간 댓글은 애니메이션을 통해 몇 초 동안 강조됩니다. 이는 is-live CSS 클래스를 통해 수행되며 이 역시 사용자 지정할 수 있습니다.

이메일 템플릿 Internal Link

FastComments에서 고객에게 보내는 이메일은 맞춤 설정할 수 있습니다. 템플릿, 로직 및 번역을 모두 변경할 수 있습니다. 텍스트는 로케일별로 맞춤 설정할 수 있으며, 스타일은 도메인별로 변경할 수도 있습니다. 맞춤 이메일 템플릿에 대해 자세히 알아보려면 여기를 확인하세요.

새 실시간 댓글을 하단에 표시 Internal Link

기본적으로 새 라이브 댓글은 실시간으로 게시될 때 댓글 목록의 맨 위에 나타납니다.

이 옵션을 활성화하면 새 라이브 댓글이 대신 목록의 맨 아래에 추가됩니다. 이는 사용자가 댓글 스레드를 보는 동안 댓글이 실시간으로 게시될 때 댓글이 나타나는 방식에 영향을 줍니다.

New Live Comments to Bottom
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "newCommentsToBottom": true
8}];
9</script>
10

이 설정을 활성화하면:

  • 다른 사용자가 게시한 새 라이브 댓글이 댓글 목록의 하단에 나타납니다
  • 사용자는 새 댓글이 기존 댓글 아래에 실시간으로 나타나는 것을 보게 됩니다
  • 이것은 라이브 댓글 업데이트에만 영향을 미치며 초기 페이지 로드에는 영향을 주지 않습니다
  • 사용자가 토론을 따라갈 때 읽기 흐름을 유지하는 데 도움이 될 수 있습니다

이 설정은 새 라이브 댓글이 실시간으로 도착할 때 배치되는 위치에만 영향을 미친다는 점에 유의하세요. 페이지 로드 시의 초기 정렬 순서에는 영향을 주지 않습니다.

무한 스크롤 활성화 Internal Link

기본적으로 FastComments 위젯은 모든 보이는 댓글이 보이도록 세로 크기를 자동으로 조정합니다. 페이지 매김은 현재 페이지 끝에 있는 "다음 보기" 버튼으로 이루어지며, 이는 대부분의 사용자에게 가장 쾌적한 상호작용이라고 판단했습니다.

그러나 무한 스크롤이 더 선호되는 경우도 있습니다. 예를 들어, 당사 Stream Chat 제품에서 이 기능을 사용합니다.

"다음 보기" 버튼을 숨기고 enableInfiniteScrolling 플래그를 true로 설정하여 무한 스크롤로 전환할 수 있습니다:

Enabling Infinite Scrolling
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "enableInfiniteScrolling": true
8}];
9</script>
10

또한 이를 위해 사용자 지정 CSS를 추가해야 합니다. 예를 들어 스크롤을 활성화하려면 .comments 선택자에 대한 사용자 지정 CSS를 추가하세요:

무한 스크롤 활성화
Copy CopyRun External Link
1
2.comments {
3 max-height: 500px;
4 overflow-y: auto;
5}
6

전체 작동 예시는 다음과 같습니다:

Enabling Infinite Scrolling
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "enableInfiniteScrolling": true,
8 "customCSS": ".comments { max-height: 500px; overflow-y: auto; }"
9}];
10</script>
11

위 예제에서는 customCSS 속성을 사용했지만, 성능상의 이유로 위젯 구성 UI를 대신 사용하는 것이 권장됩니다. 사용자 지정 CSS 문서 참조.

한 번에 모든 댓글 렌더링 - 페이지 매김 비활성화 Internal Link

페이지네이션을 비활성화하고, 모든 댓글을 한 번에 렌더링하려면 startingPage를 -1로 설정하세요.

Render All Comments
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "startingPage": -1
8}];
9</script>
10

새 최상위 댓글 방지 Internal Link

noNewRootComments를 true로 설정하면 위젯이 루트 댓글 작성 영역을 숨기지만, 사용자가 여전히 자식 댓글에는 답글을 달 수 있습니다. 예를 들어, 페이지 로드 시 조건부로 이 값을 설정하여 일부 사용자만 최상위 댓글을 작성할 수 있도록 할 수 있습니다.

새 루트 댓글 방지
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "noNewRootComments": true
8}];
9</script>
10

최대 답글 깊이 Internal Link

기본적으로 FastComments는 답글의 중첩을 무제한으로 허용하여 사용자가 답글에 계속해서 답글을 달 수 있는 스레드 구조를 만듭니다.

maxReplyDepth 옵션은 답글 스레드가 얼마나 깊게 중첩될 수 있는지를 제한할 수 있게 해줍니다. 최대 깊이에 도달하면 해당 수준의 댓글에는 더 이상 답글 버튼이 표시되지 않습니다.

Limiting Reply Depth to 2 Levels
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "maxReplyDepth": 2
8}];
9</script>
10

With maxReplyDepth set to 2:

  • 사용자는 최상위 수준(깊이 0)에 댓글을 달 수 있습니다
  • 사용자는 최상위 댓글에 답글을 달 수 있습니다 (깊이 1)
  • 사용자는 그 답글들에 다시 답글을 달 수 있습니다 (깊이 2)
  • 깊이 2를 넘어서 추가 답글은 허용되지 않습니다

Setting to 1 would only allow replies to top-level comments, creating a flatter discussion structure.

maxReplyDepth를 0으로 설정하면 모든 답글이 비활성화되어 최상위 댓글만 허용됩니다. 지정하지 않으면 답글은 무제한으로 중첩될 수 있습니다.

전송되지 않은 댓글이 있을 때 떠나기 전 경고 Internal Link

기본적으로 사용자가 댓글을 입력한 후 제출하기 전에 페이지를 새로 고치거나 탭을 닫거나 다른 페이지로 이동하면 초안이 조용히 사라집니다.

warnOnUnsavedComment 를 true 로 설정하면, 댓글 입력란이나 진행 중인 편집에 텍스트가 남아 있는 동안 페이지를 떠나기 전에 브라우저가 사용자에게 확인을 요청합니다. 댓글이 제출되면 텍스트가 지워지므로 프롬프트가 표시되지 않습니다.

저장되지 않은 댓글에 대한 경고
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "warnOnUnsavedComment": true
8}];
9</script>
10

프롬프트는 브라우저 자체 대화 상자를 사용합니다. 최신 브라우저는 자체 문구를 표시하고 사용자 지정 텍스트를 무시하므로 메시지를 맞춤 설정할 수 없습니다.

이 옵션은 필요에 따라 작은 확장을 로드하므로, 이를 활성화하지 않은 사이트의 위젯에 아무런 영향을 주지 않습니다.

단일 로그인(SSO) 개요 Internal Link

SSO(Single Sign-On, 싱글 사인온)는 사용자 여러분이나 여러분의 사용자가 다른 계정을 새로 만들 필요 없이 FastComments를 사용할 수 있도록 해주는 일련의 규약입니다.

익명 댓글 작성을 허용하지 않는 경우, FastComments로 댓글을 작성하려면 계정이 필요합니다. 우리는 이 가입 과정을 매우 쉽게 만들었습니다. 사용자는 댓글을 작성할 때 이메일만 남기면 됩니다. 하지만 일부 사이트에서는 그마저도 피하고 싶은 추가적인 마찰 요소라는 점을 우리는 잘 이해하고 있습니다.

사이트 전체에 단 하나의 로그인 흐름만 두면 이 마찰을 줄일 수 있습니다.

어떻게 사용할 수 있나요?

현재 모든 계정 유형에서 SSO를 사용할 수 있습니다. 다만 최대 SSO 사용자 수는 사용 중인 패키지에 따라 다릅니다. 다른 기능과 마찬가지로 Pro 플랜 이상에서는 직접적인 개발 지원을 제공합니다.

먼저 옵션들을 비교해 본 뒤, 각각의 세부 사항을 살펴보겠습니다.

사용자 및 댓글 마이그레이션

Disqus처럼 SSO를 사용하는 플랫폼에서 마이그레이션하는 경우, 이미 사용자와 그들의 댓글을 보유하고 있을 것입니다.

댓글은 API, Import UI 또는 고객 지원팀을 통해 마이그레이션의 일부로 가져옵니다. 마이그레이션하는 플랫폼을 지원하는 경우에는 Import UI를 사용하는 것이 좋습니다. Import UI에는 오류 처리, 아바타 및 미디어 추출과 업로드, 배치 작업 모니터링 시스템이 포함되어 있습니다.

사용자 자체는 댓글 스레드를 처음 볼 때 자동으로 추가됩니다. 또는 API를 통해 미리 추가할 수도 있지만, 이 작업에는 큰 이점이 없습니다.

댓글을 가져왔고 SSO 사용자가 API를 통해 수동으로 추가되지 않은 경우, 사용자가 댓글 스레드를 볼 때 계정이 처음 생성되는 시점에 댓글이 자동으로 해당 사용자의 계정으로 마이그레이션됩니다. 그 후 사용자는 원래 작성한 댓글을 관리, 편집, 삭제할 수 있게 됩니다.

자동 마이그레이션은 이메일 또는 사용자 이름을 통해 수행됩니다. Disqus처럼 일부 플랫폼은 내보내기 시 이메일을 제공하지 않으므로, 이 경우 사용자 이름으로 대체합니다.

  • 일치하는 사용자 이름과 SSO 페이로드에 이메일을 전달하기만 하면, 개별 댓글 객체에 이메일을 추가하여 알림과 멘션이 작동하도록 합니다.

댓글과 사용자를 한 번에 가져오고 싶다면, API를 통해 사용자를 가져온 후 지원팀과 협력하여 댓글을 사용자의 각 계정으로 마이그레이션하면 됩니다.

요약하면, 마이그레이션을 위한 가장 쉬운 방법은 다음과 같습니다:

  1. 댓글을 가져옵니다.
    1. Manage Data -> Imports의 Import UI를 사용하면 아바타와 기타 미디어가 자동으로 마이그레이션됩니다.
  2. Secure SSO 또는 Simple SSO를 설정합니다.
  3. 사용자가 처음 로그인할 때 사용자별로 마이그레이션이 자동으로 진행되도록 합니다.
    1. 사용자의 댓글이 5만 개 미만인 경우 일반적으로 페이지 로드 시간에 1초 미만만 추가됩니다.

WordPress 사용자

WordPress 플러그인을 사용 중이라면 작성할 코드가 없습니다! 플러그인의 관리자 페이지로 이동하여 SSO Settings를 클릭한 다음 Enable을 클릭하기만 하면 됩니다.

그러면 원클릭 마법사로 이동하여 API 키를 생성하고, WordPress 설치 환경으로 전송한 뒤 SSO를 활성화합니다. 우리는 이 과정을 단 한 번의 버튼 클릭으로 통합했습니다.

플러그인을 처음 설치하는 경우에는 SSO Settings 버튼이 있는 관리자 페이지가 보이기 전에 설정 과정을 먼저 완료해야 한다는 점에 유의하세요.

WordPress SSO - 중재자(Moderators)

FastComments WordPress 플러그인으로 댓글을 작성할 때 중재자 옆에 "Moderator" 배지가 표시되려면, 현재로서는 해당 사용자가 FastComments 대시보드에서도 중재자(Moderator)로 추가되어 있고 이메일 인증이 완료되어 있어야 합니다.

커스텀 통합

커스텀 통합에는 두 가지 옵션이 있습니다.

옵션 1 - Secure SSO

Secure SSO를 사용하면 FastComments는 댓글을 작성하고, 투표하고, 댓글을 읽는 사용자가 여러분 사이트의 실제 사용자임을 알 수 있습니다.

유효한 페이로드를 생성하기만 하면 사용자는 항상 매끄러운 댓글 작성 경험을 누릴 수 있습니다.

Secure SSO에서는 SSO 페이로드가 HMAC 인증을 사용하여 서버 측에서 생성된 후 클라이언트의 위젯에 전달됩니다.

Secure SSO에서는 사용자의 계정이 나머지 FastComments 사용자 기반과 완전히 분리됩니다. 즉, Company A와 Company B라는 두 파트너가 있을 경우, 각각 사용자 이름이 "Bob"인 SSO 사용자를 가질 수 있습니다.

요구 사항

  • 백엔드 개발에 대한 기본적인 지식.
  • 시크릿 API 키 처리에 대한 기본적인 지식.
  • API 개발 또는 서버 사이드 렌더링에 대한 기본적인 지식.

장점

  • 안전합니다.
  • 매끄러운 댓글 작성 경험.

단점

  • 백엔드 개발이 필요합니다.

사용자 데이터 업데이트

Secure SSO에서는 sso 사용자 페이로드를 전달할 때마다 최신 정보로 사용자를 업데이트합니다. 예를 들어, 사용자의 사용자 이름이 X인데 SSO 페이로드에서 Y를 전달하면 사용자 이름이 Y로 변경됩니다.

이 방식으로 값을 제거하려면 undefined가 아닌 null로 설정하세요.

Secure SSO API

SSO 사용자와 상호 작용하기 위한 API도 제공합니다. 문서를 참조하세요.

Secure SSO를 사용하면 페이지 로드 시 사용자가 백그라운드에서 자동으로 생성됩니다. 사용자를 대량으로 가져올 필요가 없습니다.

옵션 2 - Simple SSO

Secure SSO의 대안은 사용자 정보를 댓글 위젯에 직접 전달하는 것입니다.

Simple SSO에서는 이메일 제공이 필수는 아니지만, 이메일이 없으면 해당 사용자의 댓글이 "Unverified"로 표시됩니다.

참고! 2022년 초부터 Simple SSO의 사용자 이름은 FastComments.com 전체에서 고유할 필요가 없습니다.

이상적으로는 Simple SSO는 백엔드 접근 권한을 제공하지 않는 플랫폼에서 개발할 때만 선택해야 합니다.

요구 사항

  • 클라이언트 측 개발에 대한 기본적인 지식.
  • 최소한 사용자의 이메일을 알아야 합니다.

장점

  • 간단합니다.
  • 모든 활동이 여전히 인증됩니다.
  • 사용자는 사용자 이름이나 이메일을 입력할 필요가 없습니다.

단점

  • 클라이언트 측 페이로드가 조작되어 어떤 사용자로도 위장될 수 있으므로 Secure SSO보다 덜 안전합니다.

Simple SSO API

Simple SSO 흐름을 통해 자동으로 생성된 사용자는 SSOUser 객체로 저장됩니다. SSOUser API를 통해 접근하고 관리할 수 있습니다. 문서를 참조하세요.

맞춤 통합 - Disqus SSO에서 마이그레이션 Internal Link

Disqus와 FastComments Secure SSO 사이의 가장 큰 차이점은 Disqus는 암호화에 SHA1을 사용하는 반면, 우리는 SHA256을 사용한다는 점입니다.

이는 Disqus에서의 마이그레이션이 쉽다는 것을 의미합니다 - 사용되는 해싱 알고리즘을 SHA1에서 SHA256으로 변경하고 UI에 전달되는 속성 이름들을 업데이트하면 됩니다.

맞춤 통합 - Commento SSO에서 마이그레이션 Internal Link

Commento는 근본적으로 다른 SSO 접근 방식을 사용합니다 - 사용자를 인증하기 위해 호출하는 엔드포인트를 보유하도록 요구합니다.

FastComments는 그와 반대로 작동합니다 - 단순히 비밀 키를 사용해 사용자의 정보를 인코딩하고 해시한 후 전달하면 됩니다.

콜백 Internal Link

댓글 위젯용 모든 라이브러리(현재 Angular, React, Vue)는 콜백을 지원합니다.

콜백은 구성 객체(configuration object)에 지정되며, 각 라이브러리에서 동일한 시그니처를 가집니다.

지원되는 콜백은:

  • onInit
  • onAuthenticationChange
  • onRender
  • commentCountUpdated
  • onReplySuccess
  • onVoteSuccess
  • onImageClicked
  • onOpenProfile
  • onCommentSubmitStart
  • onCommentsRendered

정확한 시그니처는 TypeScript 정의에서 확인할 수 있습니다.

다음은 모든 콜백을 사용한 예제입니다:

콜백 예제
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5 window.fcConfigs = [{
6 target: '#fastcomments-widget',
7 tenantId: 'demo',
8 onInit: function () {
9 console.log('Library started to fetch comments!');
10 },
11 onAuthenticationChange: function (eventName, userObj) {
12 console.log('User authenticated!', eventName, userObj);
13 },
14 onRender: function () {
15 console.log('Render event happened!');
16 },
17 commentCountUpdated: function (newCount) {
18 console.log('New comment count:', newCount);
19 },
20 onReplySuccess: function (comment) {
21 console.log('New comment saved!', comment);
22 },
23 onVoteSuccess: function (comment, voteId, direction, status) {
24 console.log('New vote saved!', comment, voteId, direction, status);
25 },
26 onImageClicked: function (src) {
27 console.log('Image clicked!', src);
28 },
29 onOpenProfile: function (userId) {
30 console.log('User tried to open profile', userId);
31 // return true; // 기본 동작(fastcomments.com 사용자 프로필 열기)을 방지하려면 true를 반환하세요.
32 },
33 onCommentSubmitStart: function(comment, continueSubmitFn, cancelFn) {
34 console.log('Trying to submit comment', comment);
35 setTimeout(function() { // 비동기 동작(예: API 호출 등)을 에뮬레이트합니다.
36 if(confirm('Should submit?')) {
37 continueSubmitFn();
38 } else {
39 cancelFn('Some optional error message');
40 }
41 }, 1000);
42 },
43 onCommentsRendered: function(comments) {
44 // comments는 페이지의 기본 정렬에 따라 정렬되며, 이는 Most Relevant(예: 가장 많은 추천을 받은 항목 등) 또는 Newest First(최신순)일 수 있습니다
45 const topCommentInList = comments[0];
46 console.log('First Comment Rendered:', topCommentInList.avatarSrc, topCommentInList.commenterName, topCommentInList.commentHTML);
47 }
48 }];
49</script>
50

페이지 제목 Internal Link

현재 페이지 제목은 지정된 urlId에 연결되어 모더레이션 도구에서 사용하기 위해 저장됩니다.

기본적으로 이는 document.title에서 가져옵니다.

원한다면, 다음과 같이 페이지 제목을 지정할 수 있습니다:

Specifying The Page Title
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "pageTitle": "Article 42"
8}];
9</script>
10

댓글 수 및 모든 중첩 답글 계산 Internal Link

댓글 위젯 상단에 표시되는 댓글 수는 페이지나 게시물 자체에 직접 달린 답글을 의미하는 "top-level" 댓글만을 표시할 수도 있고, 또는 모든 중첩된 댓글의 수를 셀 수도 있습니다.

기본적으로 이것은 true입니다 - 후자의, 즉 모든 댓글의 수를 셉니다. 댓글 위젯의 이전 버전에서는 기본값이 false였습니다.

우리는 동작을 변경하여 모든 중첩 댓글의 수가 되도록 countAll 플래그를 true로 설정할 수 있습니다.

Counting All Comments
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "countAll": true
8}];
9</script>
10

카운트가 오직 최상위 댓글만 반영하도록 하려면, 플래그를 false로 설정합니다.

Counting Top Level Comments
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "countAll": false
8}];
9</script>
10

이 동작은 현재 코드 변경 없이 사용자화할 수 없습니다.

그룹 ID 멘션 Internal Link

@mentions 자동 완성에 사용할 id 목록입니다. 교집합 그룹이 없는 사용자에게 태그되는 것을 방지하려는 경우에 유용합니다.

지정하면 @ 문자를 입력한 후 자동 완성에는 다른 그룹에 속한 사용자만 제공됩니다.

Limit Groups for Mentions
Copy CopyRun External Link
1
2<script async src="https://cdn.fastcomments.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5window.fcConfigs = [{
6 "tenantId": "demo",
7 "mentionGroupIds": [
8 "yxZAhjzda",
9 "QT19nXbqB"
10 ]
11}];
12</script>
13