Zum Inhalt springen

Authentifizierung

Rebase enthält ein vollständiges Authentifizierungssystem:

  • JWT-Tokens — Flow für Zugriffs- und Refresh-Tokens
  • OAuth-Plugins — Steckbare Architektur für Google, LinkedIn und mehr
  • Benutzerverwaltung — Registrierung, Anmeldung, Passwort zurücksetzen
  • Rollenbasierter Zugriff — Rollen Benutzern zuweisen, Berechtigungen in Kollektionen prüfen
  • Automatisches Bootstrapping — Der erste Benutzer erhält automatisch die Administratorrolle
import { createGoogleProvider, createLinkedinProvider } from "@rebasepro/server-core";
await initializeRebaseBackend({
// ...
auth: {
jwtSecret: process.env.JWT_SECRET!, // Required
accessExpiresIn: "1h", // Access token lifetime
refreshExpiresIn: "30d", // Refresh token lifetime
requireAuth: true, // Require auth for data API
allowRegistration: false, // Allow new signups
google: process.env.GOOGLE_CLIENT_ID ? {
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET
} : undefined,
linkedin: process.env.LINKEDIN_CLIENT_ID ? {
clientId: process.env.LINKEDIN_CLIENT_ID,
clientSecret: process.env.LINKEDIN_CLIENT_SECRET
} : undefined,
email: {
smtp: {
host: "smtp.gmail.com",
port: 587,
secure: false,
user: "noreply@example.com",
pass: "app-password",
from: "Rebase <noreply@example.com>"
}
}
}
});

Die Authentifizierungstabellen (rebase.users, rebase.roles, rebase.user_roles, rebase.refresh_tokens) werden beim ersten Start automatisch erstellt.

Rebase ermöglicht den vollständigen Austausch des Standard-Authentifizierungssystems über die AuthAdapter-Schnittstelle. Übergeben Sie einen benutzerdefinierten Adapter an die Eigenschaft auth, um den integrierten JWT- und Benutzertabellen-Mechanismus vollständig zu umgehen (z. B. zur Integration mit Firebase Auth, Auth0 oder einem externen Unternehmens-SSO-Anbieter).

Auth-Tabellen (rebase.users, rebase.roles, rebase.user_roles, rebase.refresh_tokens) werden beim ersten Start automatisch erstellt.

MethodePfadBeschreibung
POST/api/auth/registerNeues Konto erstellen
POST/api/auth/loginMit E-Mail/Passwort anmelden
POST/api/auth/refreshZugriffstoken aktualisieren
POST/api/auth/<provider-id>Dynamischer Anmelde-Endpunkt für jeden konfigurierten OAuth-Anbieter (z.B. /api/auth/google, /api/auth/linkedin)
POST/api/auth/logoutRefresh-Token widerrufen
POST/api/auth/forgot-passwordE-Mail zum Zurücksetzen des Passworts senden
POST/api/auth/reset-passwordPasswort mit Token zurücksetzen
import { useRebaseAuthController } from "@rebasepro/auth";
import { createRebaseClient } from "@rebasepro/client";
const client = createRebaseClient({ baseUrl: API_URL, websocketUrl: WS_URL });
const authController = useRebaseAuthController({
client,
googleClientId: GOOGLE_CLIENT_ID // Optional
});
// Verfügbare Eigenschaften:
authController.user // Aktuelles Benutzerobjekt (oder null)
authController.initialLoading // True, während die gespeicherte Sitzung geprüft wird
authController.signOut() // Abmelden
authController.getAuthToken() // Aktuelles JWT für API-Aufrufe abrufen
import { RebaseLoginView } from "@rebasepro/auth";
if (!authController.user) {
return (
<RebaseLoginView
authController={authController}
googleEnabled={!!GOOGLE_CLIENT_ID}
googleClientId={GOOGLE_CLIENT_ID}
/>
);
}

Nach der Initialisierung stellt die Backend-Instanz userService und roleService bereit:

const { userService, roleService } = instance;
// Alle Benutzer auflisten
const users = await userService.listUsers();
// Eine Rolle zuweisen
await roleService.assignRole(userId, roleId);

Rebase bietet integrierte Ansichten zur Verwaltung von Benutzern und Rollen:

import { UsersView, RolesView } from "@rebasepro/core";
import { useBackendUserManagement } from "@rebasepro/auth";
const userManagement = useBackendUserManagement({
client: rebaseClient,
currentUser: authController.user
});
// In Ihren Routen:
<Route path="/users" element={<UsersView userManagement={userManagement} />} />
<Route path="/roles" element={<RolesView userManagement={userManagement} />} />

Benutzerverwaltungsoberfläche

Im Entwicklermodus können Sie verschiedene Rollen simulieren, ohne sich abzumelden:

import { useBuildEffectiveRoleController } from "@rebasepro/core";
const effectiveRoleController = useBuildEffectiveRoleController();
// Wenn aktiv, verhält sich die Benutzeroberfläche so, als hätte der aktuelle Benutzer diese Rolle
effectiveRoleController.setEffectiveRole("editor");

Wenn keine Benutzer in der Datenbank existieren, wird die erste Person, die sich registriert, automatisch zum Administrator. Danach wird die Registrierung durch die Einstellung allowRegistration gesteuert.

Dies stellt sicher, dass Sie eine neue Bereitstellung immer bootstrappen können, ohne die Datenbank manuell mit Daten füllen zu müssen.