Migration von Meteor Accounts – Case Study

Unsere Reise von Meteor Accounts zu Accounts-js.

Die Ausgangslage

Unchained Engine war ursprünglich auf Meteor aufgebaut. Das bedeutete auch: Meteor Accounts für die Benutzerverwaltung. Funktionierte, aber hatte Limitierungen.

Warum die Migration?

  • Meteor-Abhängigkeit – Wir wollten weg von Meteor, aber Accounts war tief integriert
  • Keine moderne Auth-Standards – OAuth2 und OpenID Connect nur über Umwege
  • GraphQL-Integration – Meteor Accounts spricht DDP, nicht GraphQL
  • Multi-Tenancy – Verschiedene Auth-Konfigurationen pro Tenant waren schwierig

Die Wahl: Accounts-js

Nach Evaluation mehrerer Optionen (Passport.js, Auth0, custom) haben wir uns für accounts-js entschieden:

  • Open Source und aktiv maintained
  • GraphQL-native
  • Modularer Aufbau
  • MongoDB-Support (wie Meteor)
  • Token-basierte Authentifizierung

Die Migration

Schritt 1: Datenbank-Schema

Glücklicherweise waren die Datenstrukturen ähnlich. Emails, hashed Passwords, Services – das meiste konnte bleiben.

// Meteor Format
{
  _id: "userId",
  emails: [{ address: "user@example.com", verified: true }],
  services: {
    password: { bcrypt: "..." }
  }
}

// Accounts-js ist kompatibel

Schritt 2: Token-Migration

Das grösste Problem: Aktive Sessions. Meteor verwendet Login-Tokens, accounts-js JWT. Wir haben einen Hybrid-Ansatz gewählt:

  • Alte Meteor-Tokens werden beim nächsten Login invalidiert
  • Neue JWTs werden ausgestellt
  • Grace Period für die Migration

Schritt 3: GraphQL-Schema

Das neue Auth-Schema in GraphQL:

type Mutation {
  authenticate(
    serviceName: String!
    params: AuthenticateParamsInput!
  ): LoginResult

  logout: Boolean

  refreshTokens(
    accessToken: String!
    refreshToken: String!
  ): LoginResult
}

type LoginResult {
  sessionId: String
  tokens: Tokens
  user: User
}

Schritt 4: OAuth Provider

Accounts-js macht OAuth einfacher. Neue Provider hinzufügen ist jetzt Konfiguration statt Code.

Lessons Learned

  • Planen Sie genug Zeit ein – Auth-Migration ist kritisch
  • Feature-Flag verwenden – Schrittweise Migration möglich
  • Testen, testen, testen – Edge Cases bei Password Reset, Email Verification etc.
  • Kommunikation – User müssen wissen, was sich ändert

Das Ergebnis

Nach der Migration haben wir:

  • Keine Meteor-Abhängigkeit mehr bei Auth
  • Saubere GraphQL-API für alle Auth-Operationen
  • Einfache Integration neuer OAuth-Provider
  • Bessere Token-Verwaltung mit Refresh-Tokens

Fazit

Die Migration war aufwändig, aber notwendig. Accounts-js hat sich als solide Wahl erwiesen und ermöglicht uns jetzt Features, die mit Meteor Accounts nicht möglich waren.

Für alle, die vor einer ähnlichen Migration stehen: Es lohnt sich. Planen Sie gründlich, migrieren Sie schrittweise, und unterschätzen Sie den Testaufwand nicht.

Legacy-System migrieren?

Wir haben Erfahrung mit komplexen Migrationen.

Kontakt aufnehmen