Zum Hauptinhalt springen

Überblick

Laravel Bluesky unterstützt zwei Authentifizierungsmethoden. Die API-Aufrufe nach der Authentifizierung sind bei beiden Methoden identisch.
PunktApp PasswordOAuth
Interne KlassenLegacyAgent / LegacySessionOAuthAgent / OAuthSession
EinstiegspunktBluesky::login()Bluesky::withToken(OAuthSession)
Privater SchlüsselNicht erforderlichBLUESKY_OAUTH_PRIVATE_KEY erforderlich
Nutzer-AutorisierungNicht erforderlichErforderlich (Bestätigung im Browser)
Ausführung im Hintergrund✅ Gut geeignet✅ Möglich (refresh_token speichern)
Session-SchlüsselaccessJwt / refreshJwtaccess_token / refresh_token
Abkündigung geplantNein
HauptanwendungAuto-Posts, Benachrichtigungen, Batch-VerarbeitungAktionen im Namen von Nutzern, Socialite-Anbindung
Der Name LegacyAgent bedeutet „Authentifizierungsmethode vor OAuth”, App Password selbst ist jedoch nicht als deprecated markiert. In Szenarien ohne Nutzerinteraktion, wie Benachrichtigungen und automatisierten Posts, ist App Password einfacher und passender.

Architektur

BlueskyManager ist die Implementierung hinter der Facade Bluesky. Mit login() oder withToken() konfigurieren Sie den Agent, danach nutzen die API-Aufrufe unabhängig von der Authentifizierungsmethode dieselben Methoden.

App Password (LegacyAgent)

Authentifizierungsfluss

Bluesky::login()

Setzen Sie das App Password in .env und rufen Sie login() auf.
BLUESKY_IDENTIFIER=your-handle.bsky.social
BLUESKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
use Revolution\Bluesky\Facades\Bluesky;

$response = Bluesky::login(
    identifier: config('bluesky.identifier'),
    password: config('bluesky.password'),
)->post('Hello Bluesky');

Wiederverwendung der LegacySession

Wenn Sie jedes Mal login() aufrufen, entsteht jedes Mal eine API-Anfrage. Es ist effizienter, die Session zu cachen und wiederzuverwenden.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\LegacySession;

// Erstes Login und Session speichern
Bluesky::login(
    identifier: config('bluesky.identifier'),
    password: config('bluesky.password'),
);
cache()->put('bluesky_session', Bluesky::agent()->session()->toArray(), now()->addDay());

// Beim nächsten Mal aus dem Cache wiederherstellen
$session = LegacySession::create(cache('bluesky_session', []));
Bluesky::withToken($session);

// Access Token bei Ablauf aktualisieren
if (! Bluesky::check()) {
    Bluesky::refreshSession();
}

$response = Bluesky::post('Hello from cached session');

Wichtige Schlüssel der LegacySession

SchlüsselInhaltMethode
accessJwtAccess Tokentoken()
refreshJwtRefresh Tokenrefresh()
didBluesky-DIDdid()
handleHandlehandle()
emailE-Mail-Adresseemail()
activeOb das Konto aktiv istactive()

Geeignete Anwendungsfälle

  • Auto-Posts in Background-Jobs / Queues
  • Benachrichtigungen über einen Laravel-Notification-Kanal
  • Batch-Verarbeitung und Scheduling
  • Posten unter dem eigenen Konto der Anwendung

OAuth (OAuthAgent)

Authentifizierungsfluss

Bluesky::withToken()

Übergeben Sie die per Socialite erhaltene OAuthSession an withToken().
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\OAuthSession;

// Aus Laravel-Session wiederherstellen (Web-Request)
$session = OAuthSession::create(session('bluesky_session'));
$timeline = Bluesky::withToken($session)->getTimeline();
Auch in Background-Jobs oder in der Konsole können Sie die OAuthSession aus in der DB gespeicherten Werten zusammenbauen.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\OAuthSession;

$session = OAuthSession::create([
    'did'           => $user->did,
    'refresh_token' => $user->refresh_token,
    // Für Konten außerhalb von bsky.social auch iss angeben
    // 'iss'        => $user->iss,
]);

$response = Bluesky::withToken($session)
                   ->refreshSession()
                   ->post('Hello from OAuth');

Wichtige Schlüssel der OAuthSession

SchlüsselInhaltMethode
access_tokenAccess Tokentoken()
refresh_tokenRefresh Token (nur einmal verwendbar)refresh()
did / subBluesky-DIDdid()
issURL des Authorization Serversissuer()
profile.handleHandlehandle()
profile.displayNameAnzeigenamedisplayName()
Der OAuth-refresh_token kann nur einmal verwendet werden. Aktualisieren Sie mithilfe des Events OAuthSessionUpdated nach jedem Token-Refresh unbedingt die DB. Details siehe Socialite.

Geeignete Anwendungsfälle

  • Nutzer-Login mittels Socialite
  • API-Operationen im Namen des Nutzers
  • Wenn Operationen mit unterschiedlichen Konten pro Nutzer erforderlich sind

API-Aufrufe nach der Authentifizierung sind gemeinsam

Nach withToken() verwenden Sie unabhängig von der Authentifizierungsmethode dieselben API-Methoden.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\LegacySession;
use Revolution\Bluesky\Session\OAuthSession;

// App Password
Bluesky::login(config('bluesky.identifier'), config('bluesky.password'));

// oder OAuth
$session = OAuthSession::create(session('bluesky_session'));
Bluesky::withToken($session);

// ↓ Die nachfolgenden API-Aufrufe sind vollständig gleich ↓

Bluesky::post('Hello Bluesky');
Bluesky::getTimeline();
Bluesky::getProfile();
Bluesky::searchPosts(q: '#laravel');
BlueskyManager verwendet intern je nach Bedarf LegacyAgent oder OAuthAgent, für den aufrufenden Code macht das keinen Unterschied.

Welche Methode wählen?

SituationEmpfehlung
Auto-Posts, Benachrichtigungen, BatchApp Password
Login-Funktion für NutzerOAuth
Nur Background-JobsApp Password
Aktionen im Namen von Nutzern nötigOAuth
Einfachen Betrieb priorisierenApp Password
Fokus auf Sicherheit und BerechtigungssteuerungOAuth
Bei Unsicherheit ist die Aufteilung nach Zweck am einfachsten: „Die App agiert selbst” → App Password, „Der Nutzer bedient sie” → OAuth. Beide lassen sich auch kombinieren – ein gängiger Aufbau ist App Password für Benachrichtigungen und OAuth für Nutzer-Login.
Zuletzt geändert am 13. Juli 2026