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