[{"data":1,"prerenderedAt":1868},["ShallowReactive",2],{"docs-navigation:ru":3,"\u002Fdocs\u002Fru\u002Fsite-owners\u002Fintegrations\u002Fsingle-sign-on":161,"\u002Fdocs\u002Fru\u002Fsite-owners\u002Fintegrations\u002Fsingle-sign-on:surround":1863},[4],{"title":5,"path":6,"stem":7,"children":8,"page":41},"Docs","\u002Fdocs","docs",[9],{"title":10,"path":11,"stem":12,"children":13,"page":41},"Ru","\u002Fdocs\u002Fru","docs\u002Fru",[14,106],{"title":15,"icon":16,"path":17,"stem":18,"children":19},"Владельцам сайтов","i-ph:storefront-duotone","\u002Fdocs\u002Fru\u002Fsite-owners","docs\u002Fru\u002F1.site-owners\u002Findex",[20,23,42,64,86,96],{"title":21,"path":17,"stem":18,"icon":22},"Введение","i-ph:house-line-duotone",{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":41},"Начало работы","i-ph:rocket-launch-duotone","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fgetting-started","docs\u002Fru\u002F1.site-owners\u002F1.getting-started",[29,33,37],{"title":30,"path":31,"stem":32},"Быстрый старт","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fgetting-started\u002Fquick-start","docs\u002Fru\u002F1.site-owners\u002F1.getting-started\u002F1.quick-start",{"title":34,"path":35,"stem":36},"Установка","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fgetting-started\u002Finstallation","docs\u002Fru\u002F1.site-owners\u002F1.getting-started\u002F2.installation",{"title":38,"path":39,"stem":40},"Оформление и язык","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fgetting-started\u002Fappearance","docs\u002Fru\u002F1.site-owners\u002F1.getting-started\u002F3.appearance",false,{"title":43,"icon":44,"path":45,"stem":46,"children":47,"page":41},"Модерация","i-ph:shield-check-duotone","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fmoderation","docs\u002Fru\u002F1.site-owners\u002F2.moderation",[48,52,56,60],{"title":49,"path":50,"stem":51},"Как работает модерация","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fmoderation\u002Fhow-it-works","docs\u002Fru\u002F1.site-owners\u002F2.moderation\u002F1.how-it-works",{"title":53,"path":54,"stem":55},"Модерация комментариев","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fmoderation\u002Fmoderating-comments","docs\u002Fru\u002F1.site-owners\u002F2.moderation\u002F2.moderating-comments",{"title":57,"path":58,"stem":59},"Правила и жизненный цикл","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fmoderation\u002Frules-and-lifecycle","docs\u002Fru\u002F1.site-owners\u002F2.moderation\u002F3.rules-and-lifecycle",{"title":61,"path":62,"stem":63},"Блокировка комментаторов","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fmoderation\u002Fbanning-commenters","docs\u002Fru\u002F1.site-owners\u002F2.moderation\u002F4.banning-commenters",{"title":65,"icon":66,"path":67,"stem":68,"children":69,"page":41},"Виджеты и команда","i-ph:app-window-duotone","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fwidgets","docs\u002Fru\u002F1.site-owners\u002F3.widgets",[70,74,78,82],{"title":71,"path":72,"stem":73},"Управление виджетами","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fwidgets\u002Fmanaging-widgets","docs\u002Fru\u002F1.site-owners\u002F3.widgets\u002F1.managing-widgets",{"title":75,"path":76,"stem":77},"Команда и роли","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fwidgets\u002Fteam-and-roles","docs\u002Fru\u002F1.site-owners\u002F3.widgets\u002F2.team-and-roles",{"title":79,"path":80,"stem":81},"Реакции и эмодзи","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fwidgets\u002Freactions-and-emoji","docs\u002Fru\u002F1.site-owners\u002F3.widgets\u002F3.reactions-and-emoji",{"title":83,"path":84,"stem":85},"Значки","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fwidgets\u002Fbadges","docs\u002Fru\u002F1.site-owners\u002F3.widgets\u002F4.badges",{"title":87,"icon":88,"path":89,"stem":90,"children":91,"page":41},"Интеграции","i-ph:plugs-connected-duotone","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fintegrations","docs\u002Fru\u002F1.site-owners\u002F4.integrations",[92],{"title":93,"path":94,"stem":95},"Единый вход (SSO)","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fintegrations\u002Fsingle-sign-on","docs\u002Fru\u002F1.site-owners\u002F4.integrations\u002F1.single-sign-on",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":41},"Оплата","i-ph:crown-duotone","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fbilling","docs\u002Fru\u002F1.site-owners\u002F5.billing",[102],{"title":103,"path":104,"stem":105},"Тарифы и оплата","\u002Fdocs\u002Fru\u002Fsite-owners\u002Fbilling\u002Fplans-and-billing","docs\u002Fru\u002F1.site-owners\u002F5.billing\u002F1.plans-and-billing",{"title":107,"icon":108,"path":109,"stem":110,"children":111},"Читателям","i-ph:chat-circle-text-duotone","\u002Fdocs\u002Fru\u002Freaders","docs\u002Fru\u002F2.readers\u002Findex",[112,113,125,143],{"title":21,"path":109,"stem":110,"icon":22},{"title":24,"icon":25,"path":114,"stem":115,"children":116,"page":41},"\u002Fdocs\u002Fru\u002Freaders\u002Fgetting-started","docs\u002Fru\u002F2.readers\u002F1.getting-started",[117,121],{"title":118,"path":119,"stem":120},"Вход","\u002Fdocs\u002Fru\u002Freaders\u002Fgetting-started\u002Fsigning-in","docs\u002Fru\u002F2.readers\u002F1.getting-started\u002F1.signing-in",{"title":122,"path":123,"stem":124},"Ваш профиль","\u002Fdocs\u002Fru\u002Freaders\u002Fgetting-started\u002Fyour-profile","docs\u002Fru\u002F2.readers\u002F1.getting-started\u002F2.your-profile",{"title":126,"icon":127,"path":128,"stem":129,"children":130,"page":41},"Комментирование","i-ph:chats-circle-duotone","\u002Fdocs\u002Fru\u002Freaders\u002Fcommenting","docs\u002Fru\u002F2.readers\u002F2.commenting",[131,135,139],{"title":132,"path":133,"stem":134},"Как писать комментарии","\u002Fdocs\u002Fru\u002Freaders\u002Fcommenting\u002Fwriting-comments","docs\u002Fru\u002F2.readers\u002F2.commenting\u002F1.writing-comments",{"title":136,"path":137,"stem":138},"Чтение и реакции","\u002Fdocs\u002Fru\u002Freaders\u002Fcommenting\u002Freading-and-reacting","docs\u002Fru\u002F2.readers\u002F2.commenting\u002F2.reading-and-reacting",{"title":140,"path":141,"stem":142},"Почему комментарий ждёт или исчезает","\u002Fdocs\u002Fru\u002Freaders\u002Fcommenting\u002Fwhen-comments-wait","docs\u002Fru\u002F2.readers\u002F2.commenting\u002F3.when-comments-wait",{"title":144,"icon":145,"path":146,"stem":147,"children":148,"page":41},"Ваш аккаунт","i-ph:user-circle-duotone","\u002Fdocs\u002Fru\u002Freaders\u002Faccount","docs\u002Fru\u002F2.readers\u002F3.account",[149,153,157],{"title":150,"path":151,"stem":152},"Уведомления","\u002Fdocs\u002Fru\u002Freaders\u002Faccount\u002Fnotifications","docs\u002Fru\u002F2.readers\u002F3.account\u002F1.notifications",{"title":154,"path":155,"stem":156},"Ваши комментарии и лайки","\u002Fdocs\u002Fru\u002Freaders\u002Faccount\u002Fyour-activity","docs\u002Fru\u002F2.readers\u002F3.account\u002F2.your-activity",{"title":158,"path":159,"stem":160},"Привязанные сайты","\u002Fdocs\u002Fru\u002Freaders\u002Faccount\u002Flinked-sites","docs\u002Fru\u002F2.readers\u002F3.account\u002F3.linked-sites",{"id":162,"title":93,"body":163,"description":1858,"extension":1859,"meta":1860,"navigation":463,"path":94,"seo":1861,"stem":95,"__hash__":1862},"docs_ru\u002Fdocs\u002Fru\u002F1.site-owners\u002F4.integrations\u002F1.single-sign-on.md",{"type":164,"value":165,"toc":1845},"minimark",[166,171,194,198,202,209,272,276,283,404,411,1377,1381,1384,1499,1506,1509,1716,1728,1731,1735,1738,1753,1756,1760,1775,1779,1841],[167,168,170],"h2",{"id":169},"как-это-работает","Как это работает",[172,173,174,183,191],"ol",{},[175,176,177,178,182],"li",{},"Пока читатель авторизован на вашем сайте, ваш ",[179,180,181],"strong",{},"сервер"," подписывает короткоживущий токен, в котором сказано, кто он.",[175,184,185,186,190],{},"Страница передаёт этот токен виджету комментариев в атрибуте ",[187,188,189],"code",{},"sso-token",".",[175,192,193],{},"Crowment проверяет подпись и авторизует читателя в комментариях под этой личностью.",[195,196,197],"p",{},"Токен подписывается секретом, который знают только ваш сервер и Crowment, поэтому никто не сможет войти от имени другого читателя. Единый вход доступен на всех тарифах.",[167,199,201],{"id":200},"_1-включите-его","1. Включите его",[195,203,204,205,208],{},"Откройте ",[179,206,207],{},"Site Console → ваш виджет → Single Sign-On",". Менять настройки могут владельцы и администраторы.",[210,211,213,218,229,233,254,258],"steps",{"level":212},"3",[214,215,217],"h3",{"id":216},"создайте-секрет-подписи","Создайте секрет подписи",[195,219,220,221,224,225,228],{},"Это может сделать только владелец виджета. Секрет показывается ",[179,222,223],{},"один раз",": сохраните его в переменных окружения сервера, например как ",[187,226,227],{},"CROWMENT_SSO_SECRET",". Никогда не размещайте его в коде для браузера, в сборке приложения или в публичном репозитории.",[214,230,232],{"id":231},"выберите-режим","Выберите режим",[234,235,236,242,248],"ul",{},[175,237,238,241],{},[179,239,240],{},"Off",": читатели входят только через Crowment.",[175,243,244,247],{},[179,245,246],{},"Optional",": читатели, вошедшие на ваш сайт, авторизуются автоматически; вход через Crowment остаётся доступным.",[175,249,250,253],{},[179,251,252],{},"Required",": войти могут только аккаунты вашего сайта. Существующие комментарии и сессии сохраняются.",[214,255,257],{"id":256},"укажите-страницы-входа-и-выхода-необязательно","Укажите страницы входа и выхода (необязательно)",[195,259,260,261,264,265,268,269,271],{},"Обе должны находиться на домене виджета. Кнопка входа в виджете отправляет читателей на вашу ",[179,262,263],{},"страницу входа"," с параметром ",[187,266,267],{},"return_to",", в котором указана страница, откуда они пришли. Перед перенаправлением убедитесь, что ",[187,270,267],{}," ведёт на ваш собственный сайт.",[167,273,275],{"id":274},"_2-подпишите-токен-на-сервере","2. Подпишите токен на сервере",[195,277,278,279,282],{},"При каждом просмотре страницы авторизованным читателем подписывайте JWT алгоритмом ",[179,280,281],{},"HS256"," своим секретом.",[284,285,286,302],"table",{},[287,288,289],"thead",{},[290,291,292,296,299],"tr",{},[293,294,295],"th",{},"Claim",[293,297,298],{},"Обязательно",[293,300,301],{},"Значение",[303,304,305,323,335,352,376,388],"tbody",{},[290,306,307,313,316],{},[308,309,310],"td",{},[187,311,312],{},"sub",[308,314,315],{},"да",[308,317,318,319,322],{},"ID пользователя на вашем сайте в виде ",[179,320,321],{},"строки",", не длиннее 128 символов. Используйте ID, который никогда не меняется и не переиспользуется; адрес email — плохой выбор.",[290,324,325,330,332],{},[308,326,327],{},[187,328,329],{},"name",[308,331,315],{},[308,333,334],{},"Имя рядом с комментариями, до 100 символов. HTML удаляется.",[290,336,337,342,345],{},[308,338,339],{},[187,340,341],{},"avatar",[308,343,344],{},"нет",[308,346,347,348,351],{},"URL изображения с ",[187,349,350],{},"https:\u002F\u002F",". Всё остальное игнорируется.",[290,353,354,359,361],{},[308,355,356],{},[187,357,358],{},"badges",[308,360,344],{},[308,362,363,364,367,368,371,372,375],{},"Ключи значков читателя, например ",[187,365,366],{},"[\"vip\"]",", совпадающие с SSO-ключами в разделе ",[179,369,370],{},"Badges",". Если не передать, значки не меняются; ",[187,373,374],{},"[]"," снимает значки, выданные этим способом. Значки, выданные в панели, остаются.",[290,377,378,383,385],{},[308,379,380],{},[187,381,382],{},"aud",[308,384,315],{},[308,386,387],{},"App key вашего виджета — точно как в коде встраивания.",[290,389,390,399,401],{},[308,391,392,395,396],{},[187,393,394],{},"iat",", ",[187,397,398],{},"exp",[308,400,315],{},[308,402,403],{},"Время выпуска и истечения в секундах. Токен живёт не дольше часа. Допускается расхождение часов в одну минуту.",[195,405,406,407,410],{},"Claim ",[187,408,409],{},"email"," не нужен и не используется: Crowment никогда не сопоставляет аккаунты по email.",[412,413,414,615,857,1127],"code-group",{},[415,416,422],"pre",{"className":417,"code":418,"filename":419,"language":420,"meta":421,"style":421},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F npm install jsonwebtoken\nimport jwt from 'jsonwebtoken'\n\nconst ssoToken = jwt.sign(\n  { sub: String(user.id), name: user.displayName, avatar: user.avatarUrl },\n  process.env.CROWMENT_SSO_SECRET,\n  { algorithm: 'HS256', audience: CROWMENT_APP_KEY, expiresIn: '1h' },\n)\n","Node.js","js","",[187,423,424,433,458,465,490,547,565,609],{"__ignoreMap":421},[425,426,429],"span",{"class":427,"line":428},"line",1,[425,430,432],{"class":431},"sHwdD","\u002F\u002F npm install jsonwebtoken\n",[425,434,436,440,444,447,451,455],{"class":427,"line":435},2,[425,437,439],{"class":438},"s7zQu","import",[425,441,443],{"class":442},"sTEyZ"," jwt ",[425,445,446],{"class":438},"from",[425,448,450],{"class":449},"sMK4o"," '",[425,452,454],{"class":453},"sfazB","jsonwebtoken",[425,456,457],{"class":449},"'\n",[425,459,461],{"class":427,"line":460},3,[425,462,464],{"emptyLinePlaceholder":463},true,"\n",[425,466,468,472,475,478,481,483,487],{"class":427,"line":467},4,[425,469,471],{"class":470},"spNyl","const",[425,473,474],{"class":442}," ssoToken ",[425,476,477],{"class":449},"=",[425,479,480],{"class":442}," jwt",[425,482,190],{"class":449},[425,484,486],{"class":485},"s2Zo4","sign",[425,488,489],{"class":442},"(\n",[425,491,493,496,500,503,506,509,511,514,517,520,522,525,527,530,532,535,537,539,541,544],{"class":427,"line":492},5,[425,494,495],{"class":449},"  {",[425,497,499],{"class":498},"swJcz"," sub",[425,501,502],{"class":449},":",[425,504,505],{"class":485}," String",[425,507,508],{"class":442},"(user",[425,510,190],{"class":449},[425,512,513],{"class":442},"id)",[425,515,516],{"class":449},",",[425,518,519],{"class":498}," name",[425,521,502],{"class":449},[425,523,524],{"class":442}," user",[425,526,190],{"class":449},[425,528,529],{"class":442},"displayName",[425,531,516],{"class":449},[425,533,534],{"class":498}," avatar",[425,536,502],{"class":449},[425,538,524],{"class":442},[425,540,190],{"class":449},[425,542,543],{"class":442},"avatarUrl ",[425,545,546],{"class":449},"},\n",[425,548,550,553,555,558,560,562],{"class":427,"line":549},6,[425,551,552],{"class":442},"  process",[425,554,190],{"class":449},[425,556,557],{"class":442},"env",[425,559,190],{"class":449},[425,561,227],{"class":442},[425,563,564],{"class":449},",\n",[425,566,568,570,573,575,577,579,582,584,587,589,592,594,597,599,601,604,606],{"class":427,"line":567},7,[425,569,495],{"class":449},[425,571,572],{"class":498}," algorithm",[425,574,502],{"class":449},[425,576,450],{"class":449},[425,578,281],{"class":453},[425,580,581],{"class":449},"'",[425,583,516],{"class":449},[425,585,586],{"class":498}," audience",[425,588,502],{"class":449},[425,590,591],{"class":442}," CROWMENT_APP_KEY",[425,593,516],{"class":449},[425,595,596],{"class":498}," expiresIn",[425,598,502],{"class":449},[425,600,450],{"class":449},[425,602,603],{"class":453},"1h",[425,605,581],{"class":449},[425,607,608],{"class":449}," },\n",[425,610,612],{"class":427,"line":611},8,[425,613,614],{"class":442},")\n",[415,616,621],{"className":617,"code":618,"filename":619,"language":620,"meta":421,"style":421},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F composer require firebase\u002Fphp-jwt\nuse Firebase\\JWT\\JWT;\n\n$now = time();\n$ssoToken = JWT::encode([\n    'sub'    => (string) $user->id,\n    'name'   => $user->display_name,\n    'avatar' => $user->avatar_url,\n    'aud'    => CROWMENT_APP_KEY,\n    'iat'    => $now,\n    'exp'    => $now + 3600,\n], getenv('CROWMENT_SSO_SECRET'), 'HS256');\n","PHP","php",[187,622,623,628,650,654,670,692,727,749,771,786,804,827],{"__ignoreMap":421},[425,624,625],{"class":427,"line":428},[425,626,627],{"class":431},"\u002F\u002F composer require firebase\u002Fphp-jwt\n",[425,629,630,634,637,640,643,645,647],{"class":427,"line":435},[425,631,633],{"class":632},"sbssI","use",[425,635,636],{"class":442}," Firebase",[425,638,639],{"class":449},"\\",[425,641,642],{"class":442},"JWT",[425,644,639],{"class":449},[425,646,642],{"class":442},[425,648,649],{"class":449},";\n",[425,651,652],{"class":427,"line":460},[425,653,464],{"emptyLinePlaceholder":463},[425,655,656,659,662,664,667],{"class":427,"line":467},[425,657,658],{"class":449},"$",[425,660,661],{"class":442},"now ",[425,663,477],{"class":449},[425,665,666],{"class":485}," time",[425,668,669],{"class":449},"();\n",[425,671,672,674,677,679,683,686,689],{"class":427,"line":492},[425,673,658],{"class":449},[425,675,676],{"class":442},"ssoToken ",[425,678,477],{"class":449},[425,680,682],{"class":681},"sBMFI"," JWT",[425,684,685],{"class":449},"::",[425,687,688],{"class":485},"encode",[425,690,691],{"class":449},"([\n",[425,693,694,697,699,701,704,707,710,713,716,719,722,725],{"class":427,"line":549},[425,695,696],{"class":449},"    '",[425,698,312],{"class":453},[425,700,581],{"class":449},[425,702,703],{"class":449},"    =>",[425,705,706],{"class":449}," (",[425,708,709],{"class":470},"string",[425,711,712],{"class":449},")",[425,714,715],{"class":449}," $",[425,717,718],{"class":442},"user",[425,720,721],{"class":449},"->",[425,723,724],{"class":442},"id",[425,726,564],{"class":449},[425,728,729,731,733,735,738,740,742,744,747],{"class":427,"line":567},[425,730,696],{"class":449},[425,732,329],{"class":453},[425,734,581],{"class":449},[425,736,737],{"class":449},"   =>",[425,739,715],{"class":449},[425,741,718],{"class":442},[425,743,721],{"class":449},[425,745,746],{"class":442},"display_name",[425,748,564],{"class":449},[425,750,751,753,755,757,760,762,764,766,769],{"class":427,"line":611},[425,752,696],{"class":449},[425,754,341],{"class":453},[425,756,581],{"class":449},[425,758,759],{"class":449}," =>",[425,761,715],{"class":449},[425,763,718],{"class":442},[425,765,721],{"class":449},[425,767,768],{"class":442},"avatar_url",[425,770,564],{"class":449},[425,772,774,776,778,780,782,784],{"class":427,"line":773},9,[425,775,696],{"class":449},[425,777,382],{"class":453},[425,779,581],{"class":449},[425,781,703],{"class":449},[425,783,591],{"class":442},[425,785,564],{"class":449},[425,787,789,791,793,795,797,799,802],{"class":427,"line":788},10,[425,790,696],{"class":449},[425,792,394],{"class":453},[425,794,581],{"class":449},[425,796,703],{"class":449},[425,798,715],{"class":449},[425,800,801],{"class":442},"now",[425,803,564],{"class":449},[425,805,807,809,811,813,815,817,819,822,825],{"class":427,"line":806},11,[425,808,696],{"class":449},[425,810,398],{"class":453},[425,812,581],{"class":449},[425,814,703],{"class":449},[425,816,715],{"class":449},[425,818,661],{"class":442},[425,820,821],{"class":449},"+",[425,823,824],{"class":632}," 3600",[425,826,564],{"class":449},[425,828,830,833,836,839,841,843,845,848,850,852,854],{"class":427,"line":829},12,[425,831,832],{"class":449},"],",[425,834,835],{"class":485}," getenv",[425,837,838],{"class":449},"(",[425,840,581],{"class":449},[425,842,227],{"class":453},[425,844,581],{"class":449},[425,846,847],{"class":449},"),",[425,849,450],{"class":449},[425,851,281],{"class":453},[425,853,581],{"class":449},[425,855,856],{"class":449},");\n",[415,858,863],{"className":859,"code":860,"filename":861,"language":862,"meta":421,"style":421},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# pip install pyjwt\nimport os\nfrom datetime import datetime, timedelta, timezone\nimport jwt\n\nnow = datetime.now(timezone.utc)\nsso_token = jwt.encode(\n    {\n        \"sub\": str(user.id),\n        \"name\": user.display_name,\n        \"avatar\": user.avatar_url,\n        \"aud\": CROWMENT_APP_KEY,\n        \"iat\": now,\n        \"exp\": now + timedelta(hours=1),\n    },\n    os.environ[\"CROWMENT_SSO_SECRET\"],\n    algorithm=\"HS256\",\n)\n","Python","python",[187,864,865,870,877,899,906,910,934,949,954,980,998,1016,1030,1046,1077,1083,1106,1122],{"__ignoreMap":421},[425,866,867],{"class":427,"line":428},[425,868,869],{"class":431},"# pip install pyjwt\n",[425,871,872,874],{"class":427,"line":435},[425,873,439],{"class":438},[425,875,876],{"class":442}," os\n",[425,878,879,881,884,886,889,891,894,896],{"class":427,"line":460},[425,880,446],{"class":438},[425,882,883],{"class":442}," datetime ",[425,885,439],{"class":438},[425,887,888],{"class":442}," datetime",[425,890,516],{"class":449},[425,892,893],{"class":442}," timedelta",[425,895,516],{"class":449},[425,897,898],{"class":442}," timezone\n",[425,900,901,903],{"class":427,"line":467},[425,902,439],{"class":438},[425,904,905],{"class":442}," jwt\n",[425,907,908],{"class":427,"line":492},[425,909,464],{"emptyLinePlaceholder":463},[425,911,912,914,916,918,920,922,924,927,929,932],{"class":427,"line":549},[425,913,661],{"class":442},[425,915,477],{"class":449},[425,917,888],{"class":442},[425,919,190],{"class":449},[425,921,801],{"class":485},[425,923,838],{"class":449},[425,925,926],{"class":485},"timezone",[425,928,190],{"class":449},[425,930,931],{"class":498},"utc",[425,933,614],{"class":449},[425,935,936,939,941,943,945,947],{"class":427,"line":567},[425,937,938],{"class":442},"sso_token ",[425,940,477],{"class":449},[425,942,480],{"class":442},[425,944,190],{"class":449},[425,946,688],{"class":485},[425,948,489],{"class":449},[425,950,951],{"class":427,"line":611},[425,952,953],{"class":449},"    {\n",[425,955,956,959,961,964,966,969,971,973,975,977],{"class":427,"line":773},[425,957,958],{"class":449},"        \"",[425,960,312],{"class":453},[425,962,963],{"class":449},"\"",[425,965,502],{"class":449},[425,967,968],{"class":681}," str",[425,970,838],{"class":449},[425,972,718],{"class":485},[425,974,190],{"class":449},[425,976,724],{"class":498},[425,978,979],{"class":449},"),\n",[425,981,982,984,986,988,990,992,994,996],{"class":427,"line":788},[425,983,958],{"class":449},[425,985,329],{"class":453},[425,987,963],{"class":449},[425,989,502],{"class":449},[425,991,524],{"class":485},[425,993,190],{"class":449},[425,995,746],{"class":498},[425,997,564],{"class":449},[425,999,1000,1002,1004,1006,1008,1010,1012,1014],{"class":427,"line":806},[425,1001,958],{"class":449},[425,1003,341],{"class":453},[425,1005,963],{"class":449},[425,1007,502],{"class":449},[425,1009,524],{"class":485},[425,1011,190],{"class":449},[425,1013,768],{"class":498},[425,1015,564],{"class":449},[425,1017,1018,1020,1022,1024,1026,1028],{"class":427,"line":829},[425,1019,958],{"class":449},[425,1021,382],{"class":453},[425,1023,963],{"class":449},[425,1025,502],{"class":449},[425,1027,591],{"class":485},[425,1029,564],{"class":449},[425,1031,1033,1035,1037,1039,1041,1044],{"class":427,"line":1032},13,[425,1034,958],{"class":449},[425,1036,394],{"class":453},[425,1038,963],{"class":449},[425,1040,502],{"class":449},[425,1042,1043],{"class":485}," now",[425,1045,564],{"class":449},[425,1047,1049,1051,1053,1055,1057,1060,1062,1064,1066,1070,1072,1075],{"class":427,"line":1048},14,[425,1050,958],{"class":449},[425,1052,398],{"class":453},[425,1054,963],{"class":449},[425,1056,502],{"class":449},[425,1058,1059],{"class":485}," now ",[425,1061,821],{"class":449},[425,1063,893],{"class":485},[425,1065,838],{"class":449},[425,1067,1069],{"class":1068},"sHdIc","hours",[425,1071,477],{"class":449},[425,1073,1074],{"class":632},"1",[425,1076,979],{"class":449},[425,1078,1080],{"class":427,"line":1079},15,[425,1081,1082],{"class":449},"    },\n",[425,1084,1086,1089,1091,1094,1097,1099,1101,1103],{"class":427,"line":1085},16,[425,1087,1088],{"class":485},"    os",[425,1090,190],{"class":449},[425,1092,1093],{"class":498},"environ",[425,1095,1096],{"class":449},"[",[425,1098,963],{"class":449},[425,1100,227],{"class":453},[425,1102,963],{"class":449},[425,1104,1105],{"class":449},"],\n",[425,1107,1109,1112,1114,1116,1118,1120],{"class":427,"line":1108},17,[425,1110,1111],{"class":1068},"    algorithm",[425,1113,477],{"class":449},[425,1115,963],{"class":449},[425,1117,281],{"class":453},[425,1119,963],{"class":449},[425,1121,564],{"class":449},[425,1123,1125],{"class":427,"line":1124},18,[425,1126,614],{"class":449},[415,1128,1133],{"className":1129,"code":1130,"filename":1131,"language":1132,"meta":421,"style":421},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F go get github.com\u002Fgolang-jwt\u002Fjwt\u002Fv5\nnow := time.Now()\nssoToken, err := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{\n    \"sub\":    strconv.FormatInt(user.ID, 10),\n    \"name\":   user.DisplayName,\n    \"avatar\": user.AvatarURL,\n    \"aud\":    crowmentAppKey,\n    \"iat\":    now.Unix(),\n    \"exp\":    now.Add(time.Hour).Unix(),\n}).SignedString([]byte(os.Getenv(\"CROWMENT_SSO_SECRET\")))\n","Go","go",[187,1134,1135,1140,1157,1198,1233,1253,1272,1287,1308,1342],{"__ignoreMap":421},[425,1136,1137],{"class":427,"line":428},[425,1138,1139],{"class":431},"\u002F\u002F go get github.com\u002Fgolang-jwt\u002Fjwt\u002Fv5\n",[425,1141,1142,1144,1147,1149,1151,1154],{"class":427,"line":435},[425,1143,661],{"class":442},[425,1145,1146],{"class":449},":=",[425,1148,666],{"class":442},[425,1150,190],{"class":449},[425,1152,1153],{"class":485},"Now",[425,1155,1156],{"class":449},"()\n",[425,1158,1159,1162,1164,1167,1169,1171,1173,1176,1178,1181,1183,1186,1188,1190,1192,1195],{"class":427,"line":460},[425,1160,1161],{"class":442},"ssoToken",[425,1163,516],{"class":449},[425,1165,1166],{"class":442}," err ",[425,1168,1146],{"class":449},[425,1170,480],{"class":442},[425,1172,190],{"class":449},[425,1174,1175],{"class":485},"NewWithClaims",[425,1177,838],{"class":449},[425,1179,1180],{"class":442},"jwt",[425,1182,190],{"class":449},[425,1184,1185],{"class":442},"SigningMethodHS256",[425,1187,516],{"class":449},[425,1189,480],{"class":681},[425,1191,190],{"class":449},[425,1193,1194],{"class":681},"MapClaims",[425,1196,1197],{"class":449},"{\n",[425,1199,1200,1203,1205,1207,1209,1212,1214,1217,1219,1221,1223,1226,1228,1231],{"class":427,"line":467},[425,1201,1202],{"class":449},"    \"",[425,1204,312],{"class":453},[425,1206,963],{"class":449},[425,1208,502],{"class":449},[425,1210,1211],{"class":442},"    strconv",[425,1213,190],{"class":449},[425,1215,1216],{"class":485},"FormatInt",[425,1218,838],{"class":449},[425,1220,718],{"class":442},[425,1222,190],{"class":449},[425,1224,1225],{"class":442},"ID",[425,1227,516],{"class":449},[425,1229,1230],{"class":632}," 10",[425,1232,979],{"class":449},[425,1234,1235,1237,1239,1241,1243,1246,1248,1251],{"class":427,"line":492},[425,1236,1202],{"class":449},[425,1238,329],{"class":453},[425,1240,963],{"class":449},[425,1242,502],{"class":449},[425,1244,1245],{"class":442},"   user",[425,1247,190],{"class":449},[425,1249,1250],{"class":442},"DisplayName",[425,1252,564],{"class":449},[425,1254,1255,1257,1259,1261,1263,1265,1267,1270],{"class":427,"line":549},[425,1256,1202],{"class":449},[425,1258,341],{"class":453},[425,1260,963],{"class":449},[425,1262,502],{"class":449},[425,1264,524],{"class":442},[425,1266,190],{"class":449},[425,1268,1269],{"class":442},"AvatarURL",[425,1271,564],{"class":449},[425,1273,1274,1276,1278,1280,1282,1285],{"class":427,"line":567},[425,1275,1202],{"class":449},[425,1277,382],{"class":453},[425,1279,963],{"class":449},[425,1281,502],{"class":449},[425,1283,1284],{"class":442},"    crowmentAppKey",[425,1286,564],{"class":449},[425,1288,1289,1291,1293,1295,1297,1300,1302,1305],{"class":427,"line":611},[425,1290,1202],{"class":449},[425,1292,394],{"class":453},[425,1294,963],{"class":449},[425,1296,502],{"class":449},[425,1298,1299],{"class":442},"    now",[425,1301,190],{"class":449},[425,1303,1304],{"class":485},"Unix",[425,1306,1307],{"class":449},"(),\n",[425,1309,1310,1312,1314,1316,1318,1320,1322,1325,1327,1330,1332,1335,1338,1340],{"class":427,"line":773},[425,1311,1202],{"class":449},[425,1313,398],{"class":453},[425,1315,963],{"class":449},[425,1317,502],{"class":449},[425,1319,1299],{"class":442},[425,1321,190],{"class":449},[425,1323,1324],{"class":485},"Add",[425,1326,838],{"class":449},[425,1328,1329],{"class":442},"time",[425,1331,190],{"class":449},[425,1333,1334],{"class":442},"Hour",[425,1336,1337],{"class":449},").",[425,1339,1304],{"class":485},[425,1341,1307],{"class":449},[425,1343,1344,1347,1350,1353,1356,1358,1361,1363,1366,1368,1370,1372,1374],{"class":427,"line":788},[425,1345,1346],{"class":449},"}).",[425,1348,1349],{"class":485},"SignedString",[425,1351,1352],{"class":449},"([]",[425,1354,1355],{"class":470},"byte",[425,1357,838],{"class":449},[425,1359,1360],{"class":442},"os",[425,1362,190],{"class":449},[425,1364,1365],{"class":485},"Getenv",[425,1367,838],{"class":449},[425,1369,963],{"class":449},[425,1371,227],{"class":453},[425,1373,963],{"class":449},[425,1375,1376],{"class":449},")))\n",[167,1378,1380],{"id":1379},"_3-передайте-токен-виджету","3. Передайте токен виджету",[195,1382,1383],{},"На страницах, которые рендерит сервер, поместите токен в код встраивания:",[415,1385,1389],{"className":1386,"code":1387,"language":1388,"meta":421,"style":421},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript defer src=\"https:\u002F\u002Fembeds.crowment.com\u002Fcomments.js\">\u003C\u002Fscript>\n\n\u003C!-- signed in: pass the token your backend signed for this page view -->\n\u003Ccrow-comments app-key=\"YOUR_APP_KEY\" sso-token=\"SIGNED_TOKEN\">\u003C\u002Fcrow-comments>\n\n\u003C!-- signed out: leave sso-token out -->\n\u003Ccrow-comments app-key=\"YOUR_APP_KEY\">\u003C\u002Fcrow-comments>\n","html",[187,1390,1391,1422,1426,1431,1468,1472,1477],{"__ignoreMap":421},[425,1392,1393,1396,1399,1402,1405,1407,1409,1412,1414,1417,1419],{"class":427,"line":428},[425,1394,1395],{"class":449},"\u003C",[425,1397,1398],{"class":498},"script",[425,1400,1401],{"class":470}," defer",[425,1403,1404],{"class":470}," src",[425,1406,477],{"class":449},[425,1408,963],{"class":449},[425,1410,1411],{"class":453},"https:\u002F\u002Fembeds.crowment.com\u002Fcomments.js",[425,1413,963],{"class":449},[425,1415,1416],{"class":449},">\u003C\u002F",[425,1418,1398],{"class":498},[425,1420,1421],{"class":449},">\n",[425,1423,1424],{"class":427,"line":435},[425,1425,464],{"emptyLinePlaceholder":463},[425,1427,1428],{"class":427,"line":460},[425,1429,1430],{"class":431},"\u003C!-- signed in: pass the token your backend signed for this page view -->\n",[425,1432,1433,1435,1438,1441,1443,1445,1448,1450,1453,1455,1457,1460,1462,1464,1466],{"class":427,"line":467},[425,1434,1395],{"class":449},[425,1436,1437],{"class":498},"crow-comments",[425,1439,1440],{"class":470}," app-key",[425,1442,477],{"class":449},[425,1444,963],{"class":449},[425,1446,1447],{"class":453},"YOUR_APP_KEY",[425,1449,963],{"class":449},[425,1451,1452],{"class":470}," sso-token",[425,1454,477],{"class":449},[425,1456,963],{"class":449},[425,1458,1459],{"class":453},"SIGNED_TOKEN",[425,1461,963],{"class":449},[425,1463,1416],{"class":449},[425,1465,1437],{"class":498},[425,1467,1421],{"class":449},[425,1469,1470],{"class":427,"line":492},[425,1471,464],{"emptyLinePlaceholder":463},[425,1473,1474],{"class":427,"line":549},[425,1475,1476],{"class":431},"\u003C!-- signed out: leave sso-token out -->\n",[425,1478,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497],{"class":427,"line":567},[425,1480,1395],{"class":449},[425,1482,1437],{"class":498},[425,1484,1440],{"class":470},[425,1486,477],{"class":449},[425,1488,963],{"class":449},[425,1490,1447],{"class":453},[425,1492,963],{"class":449},[425,1494,1416],{"class":449},[425,1496,1437],{"class":498},[425,1498,1421],{"class":449},[195,1500,1501,1502,1505],{},"Передавайте токен на ",[179,1503,1504],{},"каждой"," странице, где читатель авторизован. Страница без токена сообщает виджету, что читатель вышел, и виджет выходит из комментариев тоже. Переходы по страницам не приводят к повторному входу каждый раз: виджет сохраняет сессию и обменивает новый токен только при смене читателя.",[195,1507,1508],{},"В одностраничном приложении добавляйте и удаляйте атрибут по мере изменения статуса входа и слушайте события виджета:",[415,1510,1512],{"className":417,"code":1511,"language":420,"meta":421,"style":421},"const widget = document.querySelector('crow-comments')\n\n\u002F\u002F after your site signs the reader in\nwidget.setAttribute('sso-token', await fetchCrowmentToken())\n\n\u002F\u002F after your site signs the reader out\nwidget.removeAttribute('sso-token')\n\n\u002F\u002F the token expired while the page was open: hand over a fresh one\nwidget.addEventListener('crow:sso-expired', async () => {\n  widget.setAttribute('sso-token', await fetchCrowmentToken())\n})\n\n\u002F\u002F Required mode without a sign-in page: show your own login\nwidget.addEventListener('crow:login-required', () => openLoginDialog())\n",[187,1513,1514,1541,1545,1550,1579,1583,1588,1607,1611,1616,1647,1672,1679,1683,1688],{"__ignoreMap":421},[425,1515,1516,1518,1521,1523,1526,1528,1531,1533,1535,1537,1539],{"class":427,"line":428},[425,1517,471],{"class":470},[425,1519,1520],{"class":442}," widget ",[425,1522,477],{"class":449},[425,1524,1525],{"class":442}," document",[425,1527,190],{"class":449},[425,1529,1530],{"class":485},"querySelector",[425,1532,838],{"class":442},[425,1534,581],{"class":449},[425,1536,1437],{"class":453},[425,1538,581],{"class":449},[425,1540,614],{"class":442},[425,1542,1543],{"class":427,"line":435},[425,1544,464],{"emptyLinePlaceholder":463},[425,1546,1547],{"class":427,"line":460},[425,1548,1549],{"class":431},"\u002F\u002F after your site signs the reader in\n",[425,1551,1552,1555,1557,1560,1562,1564,1566,1568,1570,1573,1576],{"class":427,"line":467},[425,1553,1554],{"class":442},"widget",[425,1556,190],{"class":449},[425,1558,1559],{"class":485},"setAttribute",[425,1561,838],{"class":442},[425,1563,581],{"class":449},[425,1565,189],{"class":453},[425,1567,581],{"class":449},[425,1569,516],{"class":449},[425,1571,1572],{"class":438}," await",[425,1574,1575],{"class":485}," fetchCrowmentToken",[425,1577,1578],{"class":442},"())\n",[425,1580,1581],{"class":427,"line":492},[425,1582,464],{"emptyLinePlaceholder":463},[425,1584,1585],{"class":427,"line":549},[425,1586,1587],{"class":431},"\u002F\u002F after your site signs the reader out\n",[425,1589,1590,1592,1594,1597,1599,1601,1603,1605],{"class":427,"line":567},[425,1591,1554],{"class":442},[425,1593,190],{"class":449},[425,1595,1596],{"class":485},"removeAttribute",[425,1598,838],{"class":442},[425,1600,581],{"class":449},[425,1602,189],{"class":453},[425,1604,581],{"class":449},[425,1606,614],{"class":442},[425,1608,1609],{"class":427,"line":611},[425,1610,464],{"emptyLinePlaceholder":463},[425,1612,1613],{"class":427,"line":773},[425,1614,1615],{"class":431},"\u002F\u002F the token expired while the page was open: hand over a fresh one\n",[425,1617,1618,1620,1622,1625,1627,1629,1632,1634,1636,1639,1642,1644],{"class":427,"line":788},[425,1619,1554],{"class":442},[425,1621,190],{"class":449},[425,1623,1624],{"class":485},"addEventListener",[425,1626,838],{"class":442},[425,1628,581],{"class":449},[425,1630,1631],{"class":453},"crow:sso-expired",[425,1633,581],{"class":449},[425,1635,516],{"class":449},[425,1637,1638],{"class":470}," async",[425,1640,1641],{"class":449}," ()",[425,1643,759],{"class":470},[425,1645,1646],{"class":449}," {\n",[425,1648,1649,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670],{"class":427,"line":806},[425,1650,1651],{"class":442},"  widget",[425,1653,190],{"class":449},[425,1655,1559],{"class":485},[425,1657,838],{"class":498},[425,1659,581],{"class":449},[425,1661,189],{"class":453},[425,1663,581],{"class":449},[425,1665,516],{"class":449},[425,1667,1572],{"class":438},[425,1669,1575],{"class":485},[425,1671,1578],{"class":498},[425,1673,1674,1677],{"class":427,"line":829},[425,1675,1676],{"class":449},"}",[425,1678,614],{"class":442},[425,1680,1681],{"class":427,"line":1032},[425,1682,464],{"emptyLinePlaceholder":463},[425,1684,1685],{"class":427,"line":1048},[425,1686,1687],{"class":431},"\u002F\u002F Required mode without a sign-in page: show your own login\n",[425,1689,1690,1692,1694,1696,1698,1700,1703,1705,1707,1709,1711,1714],{"class":427,"line":1079},[425,1691,1554],{"class":442},[425,1693,190],{"class":449},[425,1695,1624],{"class":485},[425,1697,838],{"class":442},[425,1699,581],{"class":449},[425,1701,1702],{"class":453},"crow:login-required",[425,1704,581],{"class":449},[425,1706,516],{"class":449},[425,1708,1641],{"class":449},[425,1710,759],{"class":470},[425,1712,1713],{"class":485}," openLoginDialog",[425,1715,1578],{"class":442},[234,1717,1718,1723],{},[175,1719,1720,1722],{},[187,1721,1631],{},": виджету нужно было авторизовать читателя, но срок токена истёк. Передайте новый.",[175,1724,1725,1727],{},[187,1726,1702],{},": режим Required, страница входа не задана, и читатель нажал кнопку входа.",[195,1729,1730],{},"Читатели, вошедшие через ваш сайт, выходят тоже на вашем сайте. Если страница выхода не задана, виджет скрывает собственную кнопку выхода, ведь отсутствие токена на следующей странице и так завершит сессию.",[167,1732,1734],{"id":1733},"_4-привязка-аккаунтов","4. Привязка аккаунтов",[195,1736,1737],{},"Читатель, у которого уже есть аккаунт Crowment, может привязать его в блоке комментариев с помощью значка ссылки рядом с аватаром. Он входит в Crowment во всплывающем окне и подтверждает действие на странице Crowment. После этого ваш сайт авторизует его под аккаунтом Crowment, а комментарии, написанные с аккаунтом вашего сайта, переходят к этому аккаунту.",[195,1739,1740,1741,1744,1745,1748,1749,1752],{},"Привязка позволяет вашему сайту авторизовать этого читателя под аккаунтом Crowment ",[179,1742,1743],{},"только на ваших страницах","; страница подтверждения сообщает ему об этом. Отвязать аккаунт можно в любой момент в User Console в разделе ",[179,1746,1747],{},"Profile → Linked sites","; комментарии остаются у читателя. Отключить привязку можно параметром ",[179,1750,1751],{},"Account linking"," в настройках SSO.",[195,1754,1755],{},"Имя и аватар из вашего токена обновляют профиль читателя в комментариях при каждом входе. Привязанные аккаунты Crowment сохраняют собственные имя и аватар.",[167,1757,1759],{"id":1758},"безопасность","Безопасность",[234,1761,1762,1765,1772],{},[175,1763,1764],{},"Храните секрет на сервере. Тот, у кого он есть, может авторизовать на вашем сайте кого угодно под любым именем.",[175,1766,1767,1768,1771],{},"При утечке нажмите ",[179,1769,1770],{},"Replace secret",". Токены, подписанные старым секретом, сразу перестают работать, поэтому немедленно разверните новый. Читатели, уже вошедшие в комментарии, остаются авторизованными.",[175,1773,1774],{},"Подписывайте токены только для читателя текущего запроса и делайте их короткоживущими.",[167,1776,1778],{"id":1777},"устранение-неполадок","Устранение неполадок",[284,1780,1781,1791],{},[287,1782,1783],{},[290,1784,1785,1788],{},[293,1786,1787],{},"Симптом",[293,1789,1790],{},"Вероятная причина",[303,1792,1793,1812,1825,1833],{},[290,1794,1795,1800],{},[308,1796,1797],{},[187,1798,1799],{},"invalid_sso_token",[308,1801,1802,1803,1805,1806,1808,1809,1811],{},"Неверный или заменённый секрет, ",[187,1804,382],{}," не совпадает с app key, алгоритм отличен от HS256, ",[187,1807,312],{}," передан числом, пустое ",[187,1810,329],{}," или срок жизни больше часа.",[290,1813,1814,1819],{},[308,1815,1816],{},[187,1817,1818],{},"sso_token_expired",[308,1820,1821,1822,1824],{},"Время ",[187,1823,398],{}," токена прошло или часы сервера сбиты. Подписывайте новый токен при каждом просмотре страницы.",[290,1826,1827,1830],{},[308,1828,1829],{},"SSO is not enabled for this app",[308,1831,1832],{},"Режим Off или секрет не создан.",[290,1834,1835,1838],{},[308,1836,1837],{},"Request origin does not match",[308,1839,1840],{},"Страница находится не на домене виджета и не на его поддомене.",[1842,1843,1844],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":421,"searchDepth":435,"depth":460,"links":1846},[1847,1848,1853,1854,1855,1856,1857],{"id":169,"depth":435,"text":170},{"id":200,"depth":435,"text":201,"children":1849},[1850,1851,1852],{"id":216,"depth":460,"text":217},{"id":231,"depth":460,"text":232},{"id":256,"depth":460,"text":257},{"id":274,"depth":435,"text":275},{"id":1379,"depth":435,"text":1380},{"id":1733,"depth":435,"text":1734},{"id":1758,"depth":435,"text":1759},{"id":1777,"depth":435,"text":1778},"Читатели, вошедшие на ваш сайт, автоматически входят и в комментарии. Без второго аккаунта и без второго входа.","md",{},{"title":93,"description":1858},"mJGroKHiY8lm-dIBJbYAz1HsrjnZgDDQBmeAolEaeR0",[1864,1866],{"title":83,"path":84,"stem":85,"description":1865,"children":-1},"Показывайте переводчиков, спонсоров и VIP рядом с их именами — вручную или через единый вход.",{"title":103,"path":104,"stem":105,"description":1867,"children":-1},"Что ограничивают тарифы, как повысить или понизить тариф и отменить подписку, и что происходит, если платёж не прошёл или вы превысили лимит.",1792581792609]