codecharter login meldet eine einzelne Maschine über Ihre normale
Browser-Session am Portal an. Das ist der bequeme Weg, eine
Entwickler-Workstation zu lizenzieren: kein API-Key, den Sie herumkopieren,
keine Lizenzdatei, die Sie von Hand herunterladen. Die Maschine erhält ein
Device-Token, das genau eines kann, nämlich eine kurzlebige Lizenz für Ihren
Account erneuern, und das Sie jederzeit im Portal widerrufen können.
Für das CI und andere Umgebungen ohne Browser bleibt der API-Key das richtige Credential. Was wo gilt, steht unter Credentials und Reihenfolge.
Anmelden
Führen Sie den Befehl auf der Maschine aus, die Sie anmelden wollen:
codecharter login
Die CLI startet eine Anmeldung beim Portal und öffnet Ihren Standardbrowser auf der Bestätigungsseite. Sie gibt Seite und Code zusätzlich aus, damit auch eine SSH-Session oder eine Maschine ohne Desktop funktioniert:
Your browser has been opened to complete the sign-in.
https://codecharter.tools/activate
Code: 7QRX-4KTB
Konnte kein Browser geöffnet werden, lautet die erste Zeile stattdessen "Open this page in a browser to complete the sign-in:", und Sie öffnen die ausgegebene Seite selbst, von einem beliebigen Gerät aus. Der Browser, in dem Sie bestätigen, muss nicht auf der Maschine laufen, die sich anmeldet.
Der Code besteht aus acht Zeichen in zwei Vierergruppen. Er verwendet nur die
Ziffern 2 bis 9 und Großbuchstaben ohne I und O, damit beim Ablesen vom
einen und Eintippen ins andere Fenster nichts zu verwechseln ist. Er ist zehn
Minuten gültig, danach muss die Anmeldung neu gestartet werden.
Während Sie bestätigen, fragt die CLI beim Portal immer wieder nach und gibt
Waiting for you to confirm the code... aus.
Im Browser bestätigen
Die Bestätigungsseite ist /activate und setzt voraus, dass Sie am Portal
angemeldet sind. Sind Sie das nicht, landen Sie zuerst auf der normalen
Login-Seite und werden danach zurückgeführt. Wenn die CLI den Browser geöffnet
hat, ist der Code bereits eingetragen; angezeigt und explizit bestätigt wird er
in jedem Fall.
Die Seite zeigt vor der Entscheidung zwei Dinge:
- Gerät, also wie die Maschine sich ausweist. Die CLI sendet
CodeCharter CLI on <Maschinenname>. - Code, damit Sie ihn mit dem im Terminal vergleichen können.
Vergleichen Sie beides. Wenn Ihnen jemand anderes einen Code geschickt hat, bestätigen Sie ihn nicht: Eine Bestätigung gibt dieser Maschine das Recht, bis zum Widerruf Lizenzen für Ihren Account zu erneuern. Mit Bestätigen schließen Sie die Anmeldung ab, mit Ablehnen weisen Sie sie zurück.
Nach der Bestätigung
Sobald Sie bestätigt haben, speichert die CLI die Credentials und ist fertig:
Signed in. The device token and license are stored on this machine.
Der Befehl endet mit Exit-Code 0. Alle lizenzpflichtigen Befehle funktionieren auf
dieser Maschine ab jetzt ohne weitere Konfiguration, und die Lizenz wird kurz
vor Ablauf automatisch aus dem gespeicherten Device-Token erneuert.
Lehnen Sie die Anmeldung ab, gibt die CLI Sign-in was denied in the browser.
aus und endet mit Exit-Code 1. Laufen die zehn Minuten ab, gibt sie The code expired before it was confirmed. Run 'codecharter login' again. aus und endet
ebenfalls mit Exit-Code 1. Ist Ihr Abo zwischen Bestätigung und
nächster Abfrage ausgelaufen, gibt sie Your account has no active subscription. Visit the portal to start a trial or subscribe. aus und hört dort auf, statt
den Code auszuwarten. Schließen Sie im Portal ein Abo ab und führen Sie
codecharter login erneut aus, dann zeigt die CLI Ihnen einen neuen Code zum
Bestätigen.
Was wo gespeichert wird
Es werden zwei Dateien in Ihrem benutzereigenen Konfigverzeichnis abgelegt, also dort, wo auch der Lizenz-Cache liegt:
| Datei | Inhalt |
|---|---|
codecharter.device-token |
Das Device-Token dieser Maschine |
codecharter.license |
Die zusammen damit ausgestellte kurzlebige Lizenz |
Das Verzeichnis ist $XDG_CONFIG_HOME/codecharter unter Linux und macOS,
%APPDATA%\CodeCharter unter Windows, mit $HOME/.config/codecharter als
Fallback für Unix-Systeme ohne XDG_CONFIG_HOME. Unter Unix wird die
Token-Datei nur für den Eigentümer lesbar angelegt, sie ist also zu keinem
Zeitpunkt für andere Konten auf der Maschine lesbar.
Kann die CLI kein benutzereigenes Konfigverzeichnis ermitteln, meldet sie
"signed in, but no per-user config directory was found to store the
credentials" und endet mit Exit-Code 1. Es wird dann nichts gespeichert,
führen Sie den Befehl einfach erneut aus, sobald eines der Verzeichnisse oben
verfügbar ist.
Was ein Device-Token darf
Ein Device-Token beginnt mit cgd_ und hat genau eine Berechtigung: eine
kurzlebige Lizenz für Ihren Account ausstellen. Mehr kann es nicht.
- Es kann nicht Ihre Regeln, Profile oder Entwürfe lesen oder ändern.
- Es kann nicht CLI-Archive herunterladen oder Checks veröffentlichen.
- Jeder Portal-Endpunkt außer der Lizenzerneuerung weist es mit 403 Forbidden ab, unabhängig davon, was Ihr Account sonst darf.
Das ist der praktische Unterschied zum API-Key, der read:rules und optional
write:rules trägt. Ein geleaktes Device-Token taugt nicht dazu, Ihre
Regelinhalte zu lesen, und auch nicht dazu, etwas hochzuladen.
Das Token selbst hat kein Ablaufdatum. Es bleibt gültig, bis Sie es im Portal widerrufen, weshalb das Portal Ihnen jede angemeldete Maschine auflistet, siehe Autorisierte Geräte.
Als welches Konto eine Maschine angemeldet ist
Eine Maschine ist als die Person angemeldet, die den Code im Browser bestätigt, und die erneuerte Lizenz ist die dieses Kontos. Dieses Konto braucht ein aktives Abo. Fehlt es, sagt die Bestätigungsseite das, statt die Bestätigung anzunehmen, und Ihr Code bleibt gültig: Starten Sie eine Testphase oder schließen Sie ein Abo ab und bestätigen Sie denselben Code danach, solange die zehn Minuten noch laufen. Ein Gerät, das Sie nicht kennen, können Sie unabhängig vom Abo ablehnen.
Die Browser-Anmeldung deckt also Ihre eigenen Maschinen ab, nicht die Ihrer Kolleginnen und Kollegen. Das Portal arbeitet mit einem Einzelkonto-Modell, im Team bleibt die Lizenzdatei der Weg, alle anderen zu lizenzieren, siehe CodeCharter im Team ausrollen. Eine angemeldete Maschine verbraucht oder belegt keinen Sitz, Sitze zählen pro Entwickler, nicht pro Geräteeintrag.
Aktuellen Stand prüfen
codecharter auth status zeigt, mit welchem Credential sich diese Maschine
authentifizieren würde, ohne das Credential selbst jemals auszugeben:
Portal: https://codecharter.tools
Credential: device token (/home/you/.config/codecharter/codecharter.device-token)
License: valid, plan Team, expires 2026-08-01 09:14:22Z
Die Zeile Credential lautet API key from CODECHARTER_API_KEY, wenn die
Umgebungsvariable gesetzt ist, device token (<Pfad>), wenn diese Maschine
angemeldet ist, und none - run 'codecharter login', or set CODECHARTER_API_KEY, wenn beides fehlt.
Da weder Key noch Token ausgegeben werden, können Sie die Ausgabe bedenkenlos in
eine Support-Anfrage kopieren. Mit --json erhalten Sie ein
maschinenlesbares Objekt mit den Feldern portal_url, credential (api_key,
device_token oder none), device_token_path sowie ein license-Objekt mit
valid, plan, expires_at und message. Der Befehl ist nicht
lizenzpflichtig und endet immer mit Exit-Code 0.
Abmelden
codecharter logout
Das entfernt das gespeicherte Device-Token von dieser Maschine:
Signed out. The stored device token was removed from this machine.
The cached license is left in place and will simply expire; it is no longer renewed from here.
Zwei Punkte sind hier wichtig.
Der Logout ist lokal. Er entfernt das Token von dieser Maschine, macht es im Portal aber nicht ungültig. Um eine Maschine dauerhaft auszusperren, etwa weil Sie keinen Zugriff mehr darauf haben, widerrufen Sie das Gerät stattdessen im Portal, siehe Autorisierte Geräte.
Die gecachte Lizenz bleibt bewusst liegen. Sie kann aus einem API-Key oder von einem Installer stammen statt aus einer Browser-Anmeldung, ein Löschen würde also Setups zerstören, die der Logout nie angefasst hat. Sie ist kurzlebig, und ohne Token erneuert sie niemand mehr.
War kein Token gespeichert, meldet der Befehl "Not signed in on this machine;
there was no stored device token to remove." So oder so endet er mit Exit-Code
0, Sie können ihn also ohne Sonderfälle in ein Aufräumskript packen.
Optionen
| Option | Befehl | Wirkung |
|---|---|---|
--portal-url <url> |
login |
An einem anderen Portal als dem konfigurierten anmelden |
--json |
login |
Die Anmeldung als zeilenweise JSON-Events ausgeben |
--json |
auth status |
Maschinenlesbares JSON statt Text ausgeben |
--license <pfad> |
auth status |
Eine bestimmte Lizenzdatei statt des Standard-Suchpfads prüfen |
login, logout und auth status sind nicht lizenzpflichtig. Sie sind der Weg,
auf dem eine Maschine überhaupt erst zu einer Lizenz kommt, eine Lizenz
vorauszusetzen wäre also zirkulär.
Ohne --portal-url nutzt login die Umgebungsvariable
CODECHARTER_PORTAL_URL, sofern sie gesetzt ist, und sonst das konfigurierte
Portal. Akzeptiert werden nur https-URLs, dazu http auf Loopback für die
lokale Entwicklung.
Die Anmeldung skripten
codecharter login --json schreibt ein JSON-Objekt pro Zeile auf die
Standardausgabe, damit eine Editor-Erweiterung oder ein Skript der Anmeldung
folgen kann, ohne Fließtext zu parsen:
{"event":"code","verification_uri":"https://codecharter.tools/activate","user_code":"7QRX-4KTB"}
{"event":"status","status":"pending"}
{"event":"status","status":"success"}
Das status-Vokabular ist pending, success, denied, expired und
subscription_required. Der letzte Wert beendet die Anmeldung sofort, sobald das
Portal ihn meldet, statt den Code auslaufen zu lassen. Fehler gehen als
{"event":"error","message":"..."} auf die Standardfehlerausgabe, damit der
Event-Stream auf der Standardausgabe sauber bleibt.
Troubleshooting
Der Browser öffnet sich, aber der Code wird nicht akzeptiert
Codes sind zehn Minuten gültig. Stand das Terminal länger offen, ist der Code
weg und die Seite sagt das auch. Führen Sie codecharter login erneut aus und
nehmen Sie den neuen Code.
"Ihr Konto hat kein aktives Abo"
Eine bestätigte Anmeldung stellt nur dann eine Lizenz aus, wenn der bestätigende Account ein aktives Abo hat. Zwei Stellen sagen Ihnen, wenn das nicht der Fall ist, und keine davon kostet Sie den Code:
- Im Browser. Die Bestätigungsseite lehnt die Bestätigung ab und erklärt warum, mit einem Link zu Ihrer Abrechnungsseite. Es wird nichts gespeichert, der Code bleibt gültig und die Maschine wartet weiter. Schließen Sie in einem zweiten Tab ein Abo ab, kommen Sie zurück und bestätigen Sie denselben Code, dann läuft die Anmeldung normal durch.
- Auf der wartenden Maschine. Ist das Abo erst nach der Bestätigung
abgelaufen, gibt die CLI sofort
Your account has no active subscription. Visit the portal to start a trial or subscribe.aus und endet mit Exit-Code1, statt auf den Ablauf des Codes zu warten. Da der Befehl damit schon beendet ist, führen Sie nach dem Abschluss des Aboscodecharter loginerneut aus und bestätigen den neuen Code.
In keinem der beiden Fälle wird Ihre Bestätigung verbraucht, im Portal bleibt also nichts halb erledigt zurück.
Viele Anmeldeversuche hintereinander
Die Anmelde-Endpunkte sind pro IP-Adresse ratenbegrenzt. Wenn Sie den Befehl in
einer Schleife skripten, antwortet das Portal mit 429 Too Many Requests und
einem Retry-After-Header, der die Wartezeit in Sekunden nennt.
Die Maschine ist ein CI-Runner
Melden Sie einen Runner nicht per codecharter login an. Geben Sie ihm
stattdessen einen API-Key als Secret, siehe
API-Keys in Secrets. Ist ein Runner zufällig
eine Maschine, auf der sich einmal jemand angemeldet hat, hat der API-Key aus
der Umgebung ohnehin Vorrang, der Job übernimmt also nie die Identität eines
Entwicklers.