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