Intégration Better Auth
Copiez un prompt de configuration incluant les étapes d'installation et le guide markdown complet pour ce plugin.
Better Auth fonctionne bien avec @capgo/capacitor-social-login lorsque vous souhaitez une connexion native sur l'appareil, tout en laissant Better Auth créer et gérer la session sur votre backend.
Cette page se concentre sur les deux modèles d'intégration les plus adaptés :
- Transmission du token natif pour Google, Apple et Facebook
- OAuth générique de Better Auth pour des fournisseurs comme Auth0, Okta, Keycloak et des serveurs OIDC personnalisés
Quel modèl’utiliser
Section intitulée « Quel modèl’utiliser »Utiliser la transmission du token natif
Section intitulée « Utiliser le transfert de token natif »Utiliser SocialLogin.login() d’abord, puis envoyez le token renvoyé à Better Auth avec authClient.signIn.social() lorsque vous utilisez :
- Apple
Utiliser l'OAuth générique de Better Auth
Section intitulée « Utiliser l’OAuth générique de Better Auth »Laissez Better Auth gérer tout le flux de redirection OAuth lorsque vous utilisez :
- Auth0
- Okta
- Keycloak
- GitHub
- OneLogin
- Tout fournisseur OAuth2 ou OIDC personnalisé
Cela garde l'échange de session côté Better Auth et évite de dupliquer la logique de redirection entre les deux systèmes.
Configuration du serveur Better Auth
Section intitulée « Configuration du serveur Better Auth »Commencez par configurer Better Auth avec les fournisseurs sociaux que vous souhaitez prendre en charge :
import { betterAuth } from 'better-auth';
export const auth = betterAuth({ baseURL: process.env.BETTER_AUTH_URL, socialProviders: { google: { clientId: process.env.GOOGLE_CLIENT_ID as string, clientSecret: process.env.GOOGLE_CLIENT_SECRET as string, }, apple: { clientId: process.env.APPLE_CLIENT_ID as string, clientSecret: process.env.APPLE_CLIENT_SECRET as string, appBundleIdentifier: process.env.APPLE_APP_BUNDLE_IDENTIFIER as string, }, facebook: { clientId: process.env.FACEBOOK_CLIENT_ID as string, clientSecret: process.env.FACEBOOK_CLIENT_SECRET as string, }, }, trustedOrigins: ['https://appleid.apple.com'],});Configuration du client Better Auth
Section intitulée « Configuration du client Better Auth »import { createAuthClient } from 'better-auth/client';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com',});Si vous utilisez React, utilisez le package client Better Auth React que votre application utilise déjà. Le schéma de transmission du token reste le même.
Exemple Google
Section intitulée « Exemple Google »Voici le chemin d’intégration le plus propre pour la connexion Google native sur mobile :
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const googleResult = await SocialLogin.login({ provider: 'google', options: { scopes: ['profile', 'email'], },});
if (googleResult.result.responseType !== 'online' || !googleResult.result.idToken) { throw new Error('Google online mode with idToken is required for Better Auth.');}
await authClient.signIn.social({ provider: 'google', idToken: { token: googleResult.result.idToken, accessToken: googleResult.result.accessToken?.token, }, callbackURL: '/dashboard',});Exemple Apple
Section intitulée « Exemple Apple »Pour Apple, passez le même nonce à la fois à la requête de connexion native et à Better Auth :
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const nonce = crypto.randomUUID();
const appleResult = await SocialLogin.login({ provider: 'apple', options: { scopes: ['email', 'name'], nonce, },});
if (!appleResult.result.idToken) { throw new Error('Apple idToken is required for Better Auth.');}
await authClient.signIn.social({ provider: 'apple', idToken: { token: appleResult.result.idToken, nonce, accessToken: appleResult.result.accessToken?.token, }, callbackURL: '/dashboard',});Exemple Facebook
Section intitulée « Exemple Facebook »Better Auth documente deux modes de relais Facebook :
- Limited Login iOS : passez le
idToken - Flux de token d'accès : passez le token d'accès en tant que
tokenetaccessToken
Cela fonctionne avec la forme de réponse de @capgo/capacitor-social-login:
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const facebookResult = await SocialLogin.login({ provider: 'facebook', options: { permissions: ['email', 'public_profile'], },});
const betterAuthToken = facebookResult.result.idToken ? { token: facebookResult.result.idToken, } : facebookResult.result.accessToken?.token ? { token: facebookResult.result.accessToken.token, accessToken: facebookResult.result.accessToken.token, } : null;
if (!betterAuthToken) { throw new Error('Facebook idToken or access token is required for Better Auth.');}
await authClient.signIn.social({ provider: 'facebook', idToken: betterAuthToken, callbackURL: '/dashboard',});Fournisseurs OAuth génériques avec Better Auth
Section intitulée « Fournisseurs OAuth génériques avec Better Auth »Pour Auth0, Okta, Keycloak, GitHub, Microsoft Entra ID et des fournisseurs similaires, le plugin OAuth générique de Better Auth est généralement plus adapté que de passer des tokens depuis SocialLogin.login({ provider: 'oauth2' }).
Serveur Better Auth
Section intitulée « Serveur Better Auth »import { betterAuth } from 'better-auth';import { genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ { providerId: 'keycloak', discoveryUrl: 'https://sso.example.com/realms/mobile/.well-known/openid-configuration', clientId: process.env.KEYCLOAK_CLIENT_ID as string, clientSecret: process.env.KEYCLOAK_CLIENT_SECRET as string, }, ], }), ],});Client Better Auth
Section intitulée « Client Better Auth »import { createAuthClient } from 'better-auth/client';import { genericOAuthClient } from 'better-auth/client/plugins';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com', plugins: [genericOAuthClient()],});
await authClient.signIn.oauth2({ providerId: 'keycloak', callbackURL: '/dashboard',});Exemples de providers pour Better Auth Generic OAuth
Section intitulée « Exemples de providers pour Better Auth Generic OAuth »Better Auth fournit des helpers préconfigurés pour plusieurs providers. Ce sont ceux qui correspondent le mieux aux exemples de providers supplémentaires présents dans la doc du plugin social-login.
import { betterAuth } from 'better-auth';import { auth0, genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ auth0({ providerId: 'auth0', domain: 'dev-example.eu.auth0.com', clientId: process.env.AUTH0_CLIENT_ID as string, clientSecret: process.env.AUTH0_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'auth0', callbackURL: '/dashboard',});Microsoft Entra ID
Section intitulée « Microsoft Entra ID »import { betterAuth } from 'better-auth';import { genericOAuth, microsoftEntraId } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ microsoftEntraId({ providerId: 'entra', tenantId: 'common', clientId: process.env.AZURE_CLIENT_ID as string, clientSecret: process.env.AZURE_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'User.Read'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'entra', callbackURL: '/dashboard',});import { betterAuth } from 'better-auth';import { genericOAuth, okta } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ okta({ providerId: 'okta', issuer: 'https://dev-12345.okta.com/oauth2/default', clientId: process.env.OKTA_CLIENT_ID as string, clientSecret: process.env.OKTA_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'okta', callbackURL: '/dashboard',});Keycloak
Section intitulée « Keycloak »import { betterAuth } from 'better-auth';import { genericOAuth, keycloak } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ keycloak({ providerId: 'keycloak', issuer: 'https://sso.example.com/realms/mobile', clientId: process.env.KEYCLOAK_CLIENT_ID as string, clientSecret: process.env.KEYCLOAK_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'keycloak', callbackURL: '/dashboard',});GitHub avec config OAuth générique manuelle
Section intitulée « GitHub avec config OAuth générique manuelle »GitHub ne possède pas d'helper Better Auth sur la page OAuth générique, utilisez donc une configuration manuelle :
import { betterAuth } from 'better-auth';import { genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ { providerId: 'github', clientId: process.env.GITHUB_CLIENT_ID as string, clientSecret: process.env.GITHUB_CLIENT_SECRET as string, authorizationUrl: 'https://github.com/login/oauth/authorize', tokenUrl: 'https://github.com/login/oauth/access_token', userInfoUrl: 'https://api.github.com/user', scopes: ['read:user', 'user:email'], pkce: true, }, ], }), ],});await authClient.signIn.oauth2({ providerId: 'github', callbackURL: '/dashboard',});Notes et mises en garde
Section intitulée « Notes et mises en garde »-
Utiliser le mode en ligne de Google Better Auth a besoin du
idToken, doncgoogle.mode: 'offline'ne convient pas à ce flux de transfert. -
Réutiliser le nonce Apple Générez-l’une seule fois, envoyez-l’à la connexion native Apple, puis transmettez la même valeur à Better Auth.
-
Gérer Facebook différemment selon la plateforme Le Login limité sur iOS vous fournit un ID token. D'autres flux ne fournissent qu'un access token.
-
Ne mélangez pas les flux OAuth génériques sans raison valable Si Better Auth gère la configuration du fournisseur OAuth, laissez-le gérer aussi le flux de redirection.
Pour aller plus loin
Section intitulée « Lectures complémentaires »- Documentation du fournisseur Google de Better Auth
- Documentation du fournisseur Apple de Better Auth
- Docs du provider Facebook de Better Auth
- Documentation du plugin OAuth générique de Better Auth
- Fournisseurs OAuth2 et OIDC pour le Social Login
Continuer avec l'intégration Better Auth
Section intitulée « Continuer avec l'intégration Better Auth »Si vous utilisez Intégration Better Auth pour planifier les flux d'authentification et de compte, le connecter à Utiliser @capgo/capacitor-social-login pour la capacité native dans Utiliser @capgo/capacitor-social-login @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-social-login @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey @capgo/capacitor-native-biometric pour les détails d'implémentation dans @capgo/capacitor-native-biometric, et Authentification à deux facteurs pour les détails d'implémentation de l'authentification à deux facteurs.