NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Git for Laravel

GitHub App a OAuth tokeny

Statické tokeny Token nikdy neexpirujú, inštalačné tokeny GitHub App a OAuth prístupové tokeny áno. GithubAppToken a OauthToken prístupový token transparentne vydajú, kešujú a obnovujú — využijú to čítania, zápisy aj dávky a tajomstvá sa pri serializácii vždy maskujú. JWT aplikácie je skutočný RS256 JWS podpísaný cez crypto-for-laravel — bez JWT knižnice tretej strany.

Inštalačné tokeny GitHub App

Aplikáciu nastavte raz v .env:

GITHUB_APP_ID=123456
GITHUB_APP_INSTALLATION_ID=7654321
GITHUB_APP_PRIVATE_KEY=/path/to/app-private-key.pem
GITHUB_APP_SLUG=acme-bot

Keď sú nastavené všetky tri hodnoty — id aplikácie, id inštalácie a privátny kľúč —, Git::github() vytvorí GithubAppToken automaticky; ak niektorá chýba, použije statický token, prípadne žiadne údaje. Git::credentials(ProviderName::Github) vráti tie isté údaje — ich ->accessToken() prečíta živý inštalačný token a pri prázdnej cache ho vydá. Prípadne ho vytvorte explicitne:

use RoundlyConsulting\Git\Dto\Credentials\{GithubAppToken, OauthToken};
use RoundlyConsulting\Git\Enums\ProviderName;

$github = Git::github(GithubAppToken::for(
    appId: config('git.providers.github.app.id'),
    installationId: config('git.providers.github.app.installation_id'),
    privateKey: config('git.providers.github.app.private_key'), // PEM string or file path
));
$github->repositories(); // installation token minted, cached to expiry, reused

Id aplikácie aj inštalácie musia byť číselné — čokoľvek iné vyhodí InvalidCredentialsException skôr, než by sa dostalo do kľúča cache. Používajte zdieľaný cache store (nie driver array), aby vydané tokeny prežili medzi požiadavkami.

OAuth prístupové tokeny

// The OAuth client (client_id, client_secret, token_url) is static per provider, so
// forProvider() takes it from git.providers.github.oauth.* and asks only for the
// per-user half.
$github = Git::github(OauthToken::forProvider(
    ProviderName::Github,
    accessToken: $access, refreshToken: $refresh, expiresAt: $expiresAt,
));

// Pass all five to OauthToken::for() to bypass config entirely.
$gitlab = Git::gitlab(OauthToken::for(
    accessToken: $access,
    refreshToken: $refresh,
    clientId: 'your-client-id',
    clientSecret: 'your-client-secret',
    tokenUrl: 'https://gitlab.com/oauth/token',
    expiresAt: $expiresAt,
));

Ak client_id, client_secret alebo token_url nie je nastavené, forProvider() vyhodí InvalidCredentialsException s názvom chýbajúceho kľúča.

Uloženie rotovaného refresh tokenu

Ak OAuth údaje ukladáte, počúvajte OauthTokenRefreshed. Platformy, ktoré refresh tokeny rotujú, zneplatnia starý v momente, keď vydajú nový. Nový token ide do cache tokenov, ktorej záznam expiruje spolu s prístupovým tokenom — po uplynutí tej hodiny zostane jediná kópia tá, ktorú ste si uložili, a tá je už neplatná:

use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Git\Events\OauthTokenRefreshed;

Event::listen(OauthTokenRefreshed::class, function (OauthTokenRefreshed $event) {
    if ($event->rotated()) {
        $connection->update([
            'refresh_token' => $event->refreshToken,
            'access_token' => $event->accessToken,
            'expires_at' => $event->expiresAt,
        ]);
    }
});

Event sa spustí pri každej obnove, s rotáciou aj bez nej; rotated() je príznak, že uloženú hodnotu treba zmeniť. Event nelogujte celý — zámerne nesie živé tokeny.

Súbežné obnovy

Súbežné workery obnovujú token len raz: na cache store, ktorý podporuje zámky (Redis, databáza, súbor, array, …), beží obnova pod zámkom a worker, ktorý na ňu čakal, použije token, ktorý držiteľ zámku práve obnovil, namiesto toho, aby znova poslal už spotrebovaný refresh token — platforma s rotáciou tak porazenému v súbehu nikdy neodpovie invalid_grant a event sa spustí raz.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.