
Sprache 🇩🇪 Deutsch
Val Town Installation
Umfragen
Live-Kommentare zu Val Town Apps hinzufügen
Val Town führt TypeScript auf Deno aus, sodass ein Val ein echter Server ist. Das macht es zu einer guten Wahl für FastComments: Das Widget ist ein Script‑Tag auf der Seite, und alles, was ein Geheimnis benötigt, wie Secure SSO oder die Verifizierung eines Webhooks, kann serverseitig im selben Val ausgeführt werden.
Dieser Leitfaden behandelt das Hinzufügen des Kommentar‑Widgets zu einem HTTP‑Val, das Anzeigen von Kommentarzahlen auf einer Indexseite, das Anmelden von Benutzern mit dem bereits vorhandenen Val‑Town‑Konto und das Empfangen von Kommentar‑Webhooks.
Sie benötigen kein Konto, um es auszuprobieren. Die Beispiele verwenden tenantId: "demo", eine gemeinsam genutzte Sandbox, und Schritt 2 behandelt das Wechseln zu Ihrem eigenen.
Schritt 1: Widget hinzufügen 
Das Widget ist ein Script-Tag und ein Container-Element, daher lässt es sich in alles einfügen, was dein Val bereits rendert. Dieses Beispiel verwendet Hono JSX, was auch die HTTP-Templates von Val Town nutzen.
Run 
Wähle eine urlId, bevor du deployst
urlId entscheidet, in welchem Thread ein Kommentar landet. Lässt du es unset, wird standardmäßig eine bereinigte Version der aktuellen Seiten-URL verwendet – genau das, was sich auf Val Town ändert: Ein Val hat einen langen *.web.val.run Hostnamen, bis du eine Subdomain beanspruchst, Branches erhalten eigene URLs, und das Umbenennen einer Seite ändert den Pfad. Jede Variante wird stillschweigend zu einem separaten, leeren Thread, und das Symptom liest sich als „meine Kommentare sind verschwunden".
Setze es auf etwas Stabiles, das du kontrollierst, wie den Post-Slug oder eine Datenbank-ID, wie oben. Übergib auch url, damit Benachrichtigungs-E-Mails und die Moderations-Tools auf die echte Seite verlinken können.
Kommentare ohne JavaScript beibehalten
FastComments rendert einen vollständigen Thread serverseitig, den ein Val in einen <noscript>-Block einfügen kann:
Run 
URL-encode die Parameter. Die serverseitige Version unterstützt anonymes und eingeloggtes Kommentieren, SSO sowie verschachtelte Antworten.
Schritt 2: Verwenden Sie Ihr eigenes Konto 
tenantId: "demo" ist ein gemeinsam genutzter öffentlicher Sandbox. Sie funktioniert ohne Anmeldung, weshalb die Beispiele sie verwenden, aber alle anderen, die FastComments ausprobieren, schreiben in dieselben Threads und jeder kann sie moderieren. Wechseln Sie, bevor Sie etwas veröffentlichen, das Ihnen wichtig ist.
Ihre Tenant-ID finden Sie auf der API-Geheimnis-Seite.
Eine Tenant-ID ist öffentlich und gehört in den Browser‑Code. Ein API‑Geheimnis ist das nicht, und nichts auf dieser Seite benötigt eines.
Aus einer Umgebungsvariable lesen
Val Town Vals sind im kostenlosen Tarif öffentlich, sodass ihr Quellcode weltlesbar ist. Bewahren Sie alles Sensible in Umgebungsvariablen auf, lesen Sie sie mit Deno.env.get:
Run 
Das ist auf Val Town aus einem zweiten Grund wichtiger als üblich: Beim Remix eines Vals werden Umgebungsvariablen‑Schlüssel kopiert, aber nicht deren Werte. Ein in einer Umgebungsvariable aufbewahrtes Geheimnis folgt Ihrem Val nicht in das Konto eines anderen. Ein in einer Datei geschriebenes Geheimnis tut es.
Das Zurückfallen auf "demo" lässt den Val für jeden funktionieren, der ihn remixt, bevor er seinen eigenen Tenant festlegt.
EU-Konten
Ein Konto, seine Daten und seine Schlüssel befinden sich in einer Region. Wenn Ihres auf eu.fastcomments.com erstellt wurde, benötigt jede Widget‑Konfiguration ebenfalls region: "eu", und die Skripte werden von cdn-eu.fastcomments.com geladen. Andernfalls lassen Sie beide unverändert.
Kommentaranzahl auf einer Indexseite 
Rendern Sie auf einer Indexseite nicht ein Kommentarzahl-Widget pro Zeile. Das wäre eine Anfrage pro Beitrag. Verwenden Sie die Bulk-Zählung, die eine einzige Anfrage für die gesamte Seite benötigt.
Markieren Sie jede Zeile mit der urlId, die ihr Thread verwendet, und laden Sie dann das Bulk-Widget einmal:
Run 
Das Skript findet jedes .fast-comments-count-Element auf der Seite und füllt dessen Anzahl aus.
data-fast-comments-url-id muss mit der urlId übereinstimmen, die das Kommentar-Widget dieses Beitrags verwendet. Wenn das Widget den Slug verwendet, verwendet der Marker den Slug. Eine Nichtübereinstimmung zeigt null bei einem Thread an, der Kommentare hat.
Das Skript fragt window.FastCommentsBulkCountConfig ab, daher spielt es keine Rolle, ob Sie die Konfiguration vor oder nach dem Skript-Tag setzen.
Sichere SSO mit std/oauth 
Wenn dein Val bereits weiß, wer der Besucher ist, übergibt Secure SSO diese Identität an das Widget, sodass der Nutzer nie eine zweite Anmeldung sieht. Es gibt keine Endpunkte zu bauen und nichts zur Laufzeit aufzurufen: Du berechnest drei Werte serverseitig und übergibst sie in der Widget-Konfiguration.
Val Town bietet Login ohne Konfiguration mit std/oauth, sodass sich der Besucher mit dem Val Town-Konto anmelden kann, das er bereits hat. Tausche das gegen alles aus, was deine App verwendet; der FastComments-Teil ändert sich nicht.
Payload auf dem Server erstellen
Der API-Schlüssel signiert den Payload und darf niemals Browser-Code erreichen. Installiere das SDK von npm, das auf Val Towns Deno-Runtime unverändert funktioniert:
Run 
getPayload() gibt { userDataJSONBase64, verificationHash, timestamp } zurück. Diese drei Werte sind alles, was den Browser erreicht. Der Schlüssel signiert sie und wird dann verworfen, sodass nichts auf der Seite einem Leser ermöglicht, einen anderen Benutzer zu fälschen.
An das Widget übergeben
Run 
oauthMiddleware fügt GET /auth/login, GET /auth/callback und POST /auth/logout für dich hinzu. Beachte, dass Logout ein POST ist, während das Widget mit einem GET zu logoutURL navigiert, also richte logoutURL auf eine kleine eigene Route, die den POST absendet.
Wenn der Besucher ausgeloggt ist, übergib sso nur mit einer loginURL. Das Widget zeigt dann eine Login-Aufforderung anstelle eines anonymen Kommentarfelds.
Häufige Probleme
timestamp ist in Epoch-Millisekunden, darf nicht in der Zukunft liegen und darf nicht älter als zwei Tage sein. Generiere es auf dem Server in derselben Anfrage, die den Hash berechnet. Die Generierung im Browser ist der klassische Fehler: Der Wert unterscheidet sich vom gehashten Wert und jeder Kommentar wird abgelehnt.
Setze niemals isAdmin oder isModerator vom Identity-Provider. Die Anmeldung mit einem Val Town-Konto sagt nichts darüber aus, wer deine Seite moderieren sollte.
Siehe den SSO-Leitfaden für die vollständige Feldliste, gruppenbeschränkte Threads und Abzeichen.
Empfangen von Webhooks 
Ein val ist ein natürlicher Webhook‑Empfänger: Er hat eine stabile URL, kann eine Signatur verifizieren und hat SQLite‑ und Blob‑Speicher integriert.
FastComments signiert ${timestamp}.${body} mit dem API‑Geheimnis Ihres Kontos und sendet zwei Header:
Run 
Die Methode überträgt das Ereignis: PUT für einen erstellten oder aktualisierten Kommentar, DELETE für einen gelöschten.
Run 
Zwei Dinge, die Probleme verursachen
Verifiziere die rohen Bytes. Das Parsen des JSON und das erneute Serialisieren ändert die Schlüsselreihenfolge und Leerzeichen, sodass der Hash abweicht und jede Zustellung fehlschlägt, ohne offensichtlichen Grund. Das ist der übliche Grund, warum ein Webhook‑Empfänger „einfach nicht funktioniert“.
Vergleiche in konstanter Zeit. Ein einfaches === auf die Signatur leckt, wie viele Bytes übereinstimmen, was ausreicht, um Byte für Byte zu fälschen.
Ereignisse verarbeiten
Antworte schnell. FastComments versucht es bei einem Nicht‑2xx‑Status erneut, und ein Endpunkt, der ständig fehlschlägt, wird schließlich automatisch deaktiviert. Führe daher die eigentliche Arbeit erst nach der Antwort aus, nicht inline.
Stelle sicher, dass die Verarbeitung anhand der Kommentar‑ID idempotent ist. Ein Retry wird mit einem neuen Zeitstempel erneut signiert, und dieselbe Kommentar‑ID kommt bei Bearbeitung und Löschung erneut, sodass es nichts Stabiles zum Deduplizieren gibt.
Beispielwerte 
Vier öffentliche Vals, die Sie remixen können, jede deckt einen Teil dieses Leitfadens ab.
Blog mit Kommentaren (live) ist ein Markdown‑Blog mit einem Thread unter jedem Beitrag und einer Gesamtsumme der Kommentare im Index. Er funktioniert sofort, wenn Sie ihn remixen, und eine Umgebungsvariable verweist auf Ihr eigenes Konto.
SSO‑Demo (live) meldet den Besucher mit seinem Val‑Town‑Konto an und übergibt diese Identität an das Widget, sodass kein zweiter Login nötig ist.
Webhook‑Empfänger (live) prüft die HMAC‑Signatur bei jeder Zustellung und speichert Ereignisse in SQLite. Er hat einen Button, der eine Test‑Payload signiert und an sich selbst liefert, sodass Sie die erfolgreiche Verifizierung beobachten können, bevor Sie einen echten Webhook konfigurieren.
Agent‑Skills (live) ist eine Bibliothek von FastComments‑Agent‑Skills, die das Widget, SSO, die REST‑API, Moderation und die Migration von Disqus abdecken. Remixen Sie sie und der Agent von Val Town, Townie, übernimmt die Skills automatisch aus skills/, sodass Ihr Agent weiß, wie Kommentare eingerichtet werden, ohne dass Sie Dokumentation in den Chat einfügen müssen.
Die gleichen Skills können überall sonst mit npx skills add fastcomments/skills installiert werden.
Domain-Fehler 
Sobald Sie den demo-Mandanten ausschalten, kann das Widget mit einem Autorisierungsfehler die Ladeverweigerung zeigen. Das liegt daran, dass FastComments nicht weiß, dass Ihr Konto auf dieser Domain verwendet werden darf.
Gehen Sie hier, um Ihre Site zu Ihrem Konto hinzuzufügen.
Val Town lohnt hier einen zweiten Blick, weil ein Val über mehr als einen Hostnamen erreichbar sein kann:
- Jeder HTTP-Val hat einen langen Standard-Endpunkt,
<org>--<id>.web.val.run. - Das Beanspruchen einer benutzerdefinierten Subdomain fügt
<name>.val.runhinzu. - Eine benutzerdefinierte Domain fügt eine dritte hinzu.
- Branches erhalten eigene URLs.
Fügen Sie die Hostnamen hinzu, von denen Sie das Widget tatsächlich bereitstellen. Wenn Sie nach der Einrichtung eine Subdomain beanspruchen, fügen Sie diese ebenfalls hinzu, sonst funktioniert das Widget nur mit der alten URL und schlägt bei der neuen fehl.
Umfragen zu Ihrer Val Town App hinzufügen 
Sobald FastComments in Ihrer Val Town‑App ist, können Sie auch Live‑Umfragen direkt in den Kommentaren durchführen. Aktivieren Sie Enable Polls in Ihren Widget‑Anpassungseinstellungen und ein Umfrage‑Button erscheint in der Kommentar‑Symbolleiste. Umfragen unterstützen 2 bis 10 Optionen, die Ergebnisse werden live für alle auf der Seite aktualisiert, und Sie wählen, wer Umfragen erstellen darf und ob das Abstimmen eine Anmeldung erfordert. Es gibt nichts Weiteres zu installieren auf Val Town.
Probieren Sie die Live‑Umfragen‑Demo oder lesen Sie die Umfragen‑Dokumentation, um sie einzurichten.