Aller au contenu

Authentification

Rebase inclut un système d’authentification complet :

  • Jetons JWT — Flux de jetons d’accès et de rafraîchissement
  • Plugins OAuth — Architecture enfichable pour Google, LinkedIn, et plus
  • Gestion des utilisateurs — Inscription, connexion, réinitialisation du mot de passe
  • Accès basé sur les rôles — Attribuer des rôles aux utilisateurs, vérifier les permissions dans les collections
  • Auto-amorçage — Le premier utilisateur obtient automatiquement le rôle d’administrateur
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>"
}
}
}
});

Les tables d’authentification (rebase.users, rebase.roles, rebase.user_roles, rebase.refresh_tokens) sont auto-créées au premier démarrage.

Rebase permet le remplacement complet du système d’authentification par défaut via l’interface AuthAdapter. Passez un adaptateur personnalisé à la propriété auth pour contourner entièrement le mécanisme intégré de JWT et de tables d’utilisateurs (par exemple, pour une intégration avec Firebase Auth, Auth0 ou un fournisseur externe de SSO d’entreprise).

Les tables d’authentification (rebase.users, rebase.roles, rebase.user_roles, rebase.refresh_tokens) sont créées automatiquement lors du premier démarrage.

MethodPathDescription
POST/api/auth/registerCréer un nouveau compte
POST/api/auth/loginSe connecter avec email/mot de passe
POST/api/auth/refreshActualiser le jeton d’accès
POST/api/auth/<provider-id>Point d’accès de connexion dynamique pour tout fournisseur OAuth configuré (par ex. /api/auth/google, /api/auth/linkedin)
POST/api/auth/logoutRévoquer le jeton de rafraîchissement
POST/api/auth/forgot-passwordEnvoyer un email de réinitialisation de mot de passe
POST/api/auth/reset-passwordRéinitialiser le mot de passe avec un jeton
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
});
// Propriétés disponibles :
authController.user // Objet utilisateur actuel (ou null)
authController.initialLoading // Vrai lors de la vérification de la session stockée
authController.signOut() // Se déconnecter
authController.getAuthToken() // Obtenir le JWT actuel pour les appels d'API
import { RebaseLoginView } from "@rebasepro/auth";
if (!authController.user) {
return (
<RebaseLoginView
authController={authController}
googleEnabled={!!GOOGLE_CLIENT_ID}
googleClientId={GOOGLE_CLIENT_ID}
/>
);
}

Après l’initialisation, l’instance du backend fournit userService et roleService :

const { userService, roleService } = instance;
// Lister tous les utilisateurs
const users = await userService.listUsers();
// Attribuer un rôle
await roleService.assignRole(userId, roleId);

Rebase fournit des vues intégrées pour la gestion des utilisateurs et des rôles :

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

Interface de gestion des utilisateurs

En mode développeur, vous pouvez simuler différents rôles sans vous déconnecter :

import { useBuildEffectiveRoleController } from "@rebasepro/core";
const effectiveRoleController = useBuildEffectiveRoleController();
// Lorsque activé, l'interface utilisateur se comporte comme si l'utilisateur actuel avait ce rôle
effectiveRoleController.setEffectiveRole("editor");

Lorsqu’aucun utilisateur n’existe dans la base de données, la première personne à s’inscrire devient automatiquement un administrateur. Après cela, l’inscription est contrôlée par le paramètre allowRegistration.

Cela garantit que vous pouvez toujours amorcer un nouveau déploiement sans avoir à ensemencer manuellement la base de données.

  • Stockage — Configuration du stockage de fichiers
  • Collections — Permissions par collection