
Jezik 🇸🇮 Slovenščina
Namestitev Val Town
Dodajanje živih komentarjev v aplikacije Val Town
Val Town izvaja TypeScript na Deno, zato je val pravi strežnik. To ga naredi primerno za FastComments: gradnik je oznaka script na strani, in vse, kar potrebuje skrivnost, kot je varna SSO ali preverjanje webhooka, lahko teče na strežniški strani v istem valu.
Ta vodnik pokriva dodajanje gradnika za komentarje v HTTP val, prikaz števila komentarjev na indeksni strani, prijavo uporabnikov s računom Val Town, ki ga že imajo, in prejemanje webhookov za komentarje.
Za preizkus ne potrebujete računa. Primeri uporabljajo tenantId: "demo", skupni sandbox, in korak 2 opisuje preklop na vašega.
Korak 1: Dodaj pripomoček 
The widget is a script tag and a container element, so it drops into whatever your val already renders. This example uses Hono JSX, which is what Val Town's HTTP templates use.
Run 
Izberite urlId pred objavo
urlId določa, v kateri nit komentar pristane. Če ga ne nastavite, se privzeto uporabi očiščena različica trenutnega URL-ja strani, kar je natanko tisto, kar se spreminja v Val Townu: val ima dolgo ime gostitelja *.web.val.run, dokler ne zahtevate poddomene, veje dobijo svoje URL-je, in preimenovanje strani spremeni pot. Vsaka različica tiho postane ločena, prazna nit, in simptom se pojavi kot “moji komentarji so izginili”.
Nastavite ga na nekaj stabilnega, kar nadzorujete, kot je slug objave ali ID baze podatkov, kot je prikazano zgoraj. Posredujte tudi url, da lahko e‑maili s obvestili in orodja za moderiranje povežejo nazaj na pravo stran.
Ohranjanje komentarjev brez JavaScripta
FastComments izriše celotno nit na strežniku, kar val lahko vstavi v blok <noscript>:
Run 
Parametre URL‑kodirajte. Strežniška različica podpira anonimno in prijavljeno komentiranje, SSO ter gnezdene odgovore.
Korak 2: Uporabi svoj račun 
tenantId: "demo" je deljeni javni peskovnik. Deluje brez registracije, zato ga primeri uporabljajo, vendar vsi drugi, ki preizkušajo FastComments, pišejo v iste niti in kdorkoli jih lahko moderira. Zamenjajte ga, preden objavite karkoli, kar vam je pomembno.
Vaš tenant ID je na API secret page.
Tenant ID je javni in naj bi bil v kodi brskalnika. API skrivnost ne sme biti, in nič na tej strani tega ne zahteva.
Read it from an environment variable
Val Town vrednosti so javne v brezplačnem sloju, zato je njihov vir svetovno berljiv. Vse občutljive podatke shranite v spremenljivke okolja, preberite jih z Deno.env.get:
Run 
To je pomembnejše kot običajno na Val Town iz drugega razloga: ponovno mešanje vrednosti (remixing) kopira ključe spremenljivk okolja, ne pa njihove vrednosti. Skrivnost, shranjena v spremenljivki okolja, ne sledi vašemu valu v račun drugega uporabnika. Skrivnost, zapisana v datoteko, sledi.
Vrnitev na "demo" ohranja val delujoč za vsakogar, ki ga ponovno meša, preden nastavi svojega najemnika.
EU accounts
Račun, njegovi podatki in ključi živijo v eni regiji. Če je vaš ustvarjen na eu.fastcomments.com, mora vsaka konfiguracija gradnika prav tako vsebovati region: "eu", skripte pa se nalagajo iz cdn-eu.fastcomments.com. V nasprotnem primeru pustite oba nespremenjena.
Število komentarjev na indeksni strani 
On an index page, don't render one comment-count widget per row. That is one request per post. Use the bulk count, which takes a single request for the whole page.
Mark each row with the urlId its thread uses, then load the bulk widget once:
Run 
The script finds every .fast-comments-count element on the page and fills in its count.
data-fast-comments-url-id has to match the urlId that post's comment widget uses. If the widget uses the slug, the marker uses the slug. A mismatch shows zero on a thread that has comments.
The script polls for window.FastCommentsBulkCountConfig, so it does not matter whether you set the config before or after the script tag.
Zavaruj SSO z std/oauth 
If your val already knows who the visitor is, Secure SSO hands that identity to the widget so they never see a second login. There are no endpoints to build and nothing to call at runtime: you compute three values server-side and pass them in the widget config.
Val Town ships zero-config login with std/oauth, so the visitor can sign in with the Val Town account they already have. Swap that for whatever your app uses; the FastComments half does not change.
Build the payload on the server
The API secret signs the payload and must never reach browser code. Install the SDK from npm, which works on Val Town's Deno runtime as-is:
Run 
getPayload() returns { userDataJSONBase64, verificationHash, timestamp }. Those three values are all that reach the browser. The secret signs them and is then dropped, so nothing in the page lets a reader forge a different user.
Pass it to the widget
Run 
oauthMiddleware adds GET /auth/login, GET /auth/callback and POST /auth/logout for you. Note that logout is a POST, while the widget navigates to logoutURL with a GET, so point logoutURL at a small route of your own that submits the POST.
When the visitor is logged out, pass sso with only a loginURL. The widget then shows a login prompt instead of an anonymous comment box.
Things that go wrong
timestamp is epoch milliseconds, must not be in the future, and must not be more than two days old. Generate it on the server in the same request that computes the hash. Generating it in the browser is the classic failure: the value differs from the one that was hashed and every comment is rejected.
Never set isAdmin or isModerator from the identity provider. Signing in with a Val Town account says nothing about who should moderate your site.
See the SSO guide for the full field list, group-gated threads, and badges.
Prejemanje webhookov 
A val je naravni prejemnik webhookov: ima stabilen URL, lahko preveri podpis in ima vgrajeno SQLite ter shranjevanje blobov.
FastComments podpiše ${timestamp}.${body} z API skrivnostjo vašega računa in pošlje dva glavi:
Run 
Metoda prenaša dogodek: PUT za ustvarjen ali posodobljen komentar, DELETE za izbrisan komentar.
Run 
Dve stvari, ki povzročata težave
Preverite surove bajte. Parsiranje JSON-a in ponovno serijaliziranje spremeni vrstni red ključev in presledke, zato se hash razlikuje in vsaka dostava spodleti brez očitnega vzroka. To je običajen razlog, da prejemnik webhooka "preprosto ne deluje".
Primerjajte v konstantnem času. Preprosto === na podpisu razkrije, koliko bajtov se ujema, kar je dovolj za podvajanje enega bajta naenkrat.
Obdelava dogodkov
Odgovorite hitro. FastComments ponavlja poizvedbe pri ne-2xx odgovoru, in končna točka, ki stalno odpoveduje, je na koncu samodejno onemogočena, zato opravite dejansko delo po odgovoru, namesto v isti zahtevi.
Poskrbite, da bo delo idempotentno glede na ID komentarja. Ponovna poizvedba je ponovno podpisana s svežim časovnim žigom, in isti ID komentarja ponovno prispe pri urejanju in brisanju, zato ni nič stabilnega, na čemer bi se lahko deduplikiralo.
Primer Vals 
Štiri javne vals, ki jih lahko remiksate, vsaka pokriva en del tega vodnika.
Blog s komentarji (živo) je Markdown blog z nitjo pod vsakim objavom in skupnimi števci komentarjev na indeksu. Deluje takoj, ko ga remiksate, in ena spremenljivka okolja ga usmeri na vaš račun.
SSO demo (živo) prijavi obiskovalca s svojim računom Val Town in to identiteto predaja gradniku, tako da ni drugega prijavljanja.
Prejemnik Webhook (živo) preveri HMAC podpis pri vsaki dostavi in shranjuje dogodke v SQLite. Ima gumb, ki podpiše testni paket podatkov in ga pošlje samemu sebi, tako da lahko opazujete uspešno preverjanje, preden konfigurirate pravi webhook.
Spretnosti agenta (živo) je knjižnica spretnosti agenta FastComments, ki pokrivajo gradnik, SSO, REST API, moderacijo in migracijo iz Disqus. Remiksajte jo in agent Val Town, Townie, samodejno prebere spretnosti iz skills/, tako da vaš agent ve, kako nastaviti komentarje, ne da bi morali lepljivo vstavljati dokumentacijo v klepet.
Enake spretnosti lahko namestite kjerkoli drugje z npx skills add fastcomments/skills.
Napake domene 
Ko izklopite najemnika demo, se lahko pripomoček zavrne naložiti z napako pooblastila. To je zato, ker FastComments ne ve, da naj dovoli, da se vaš račun uporablja na tej domeni.
Go here to add your site to your account.
Val Town je vreden dodatnega pogleda, ker je val lahko dosegljiv na več kot enem imenu gostitelja:
- Vsak HTTP val ima dolgo privzeto končno točko,
<org>--<id>.web.val.run. - Zahtevanje lastne poddomene doda
<name>.val.run. - custom domain doda tretjo.
- Veje dobijo svoje URL-je.
Dodajte katera koli imena gostiteljev, s katerimi dejansko strežete pripomoček. Če po nastavitvi zahtevate poddomeno, jo dodajte tudi, sicer pripomoček deluje na starem URL-ju in ne uspe na novem.