Skip to content

Configuration Guide

Advanced configuration options for all MagicDX plugins.


Magic-Mail Configuration

Plugin Config

typescript
// config/plugins.ts
export default () => ({
  'magic-mail': {
    enabled: true,
    config: {
      // All configuration is done in the admin panel
      // No code-level config needed!
    },
  },
});

Environment Variables (Optional)

bash
# Optional - Encryption key for credentials
ENCRYPTION_KEY=your-32-character-secret-key

# Optional - Base URL for OAuth callbacks
URL=https://yourdomain.com

Admin Panel Settings

Navigate to MagicMail → Settings to configure:

SettingDescriptionDefault
Default From EmailFallback sender address-
Default From NameFallback sender name-
Enable LoggingLog all sent emailstrue
Rate Limit DefaultDefault rate limit per account500/day

Plugin Config

typescript
// config/plugins.ts
export default () => ({
  'magic-link': {
    enabled: true,
    config: {
      // Context field control for security
      context_whitelist: [], // Only allow these fields (empty = all)
      context_blacklist: ['password', 'secret', 'apiKey', 'token'],
    },
  },
});

Environment Variables

bash
# ===== ENCRYPTION (IMPORTANT!) =====
# Primary encryption key for tokens (32 characters recommended)
MAGIC_LINK_ENCRYPTION_KEY=your-32-character-secret-key-here

# Fallback keys (used if MAGIC_LINK_ENCRYPTION_KEY not set)
# APP_KEYS=key1,key2  # Strapi's default
# API_TOKEN_SALT=your-api-salt

# ===== OTP HASHING =====
# Pepper for OTP code hashing (adds extra security layer)
OTP_PEPPER=your-otp-pepper-secret

# ===== URLs =====
# Frontend URL for magic link redirects
FRONTEND_URL=https://yourfrontend.com

# Base URL for confirmation links
URL=https://yourstrapi.com

Security Note

Never commit .env to version control! Always use strong, unique keys in production.

Generate a secure key:

bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Admin Panel Settings

Navigate to Magic-Link → Settings:

General Settings

SettingDescriptionDefault
enabledEnable/disable plugintrue
createUserIfNotExistsAuto-create users on first logintrue
expire_periodToken expiration (seconds)3600
token_lengthToken length (20-40)20
stays_validToken reusable after first usefalse

Email Settings

SettingDescriptionDefault
from_nameSender name"Your App"
from_emailSender email-
objectEmail subject"Your Magic Link"
message_htmlHTML email templateBuilt-in
message_textPlain text templateBuilt-in

Security Settings

SettingDescriptionDefault
rate_limit_enabledEnable rate limitingtrue
rate_limit_max_attemptsMax requests per window5
rate_limit_window_minutesWindow duration (minutes)15

MFA Settings (Premium/Advanced)

SettingDescriptionLicense
otp_enabledEnable Email OTPPremium
otp_lengthOTP code length (4-8)Premium
otp_expiryOTP expiration (seconds)Premium
mfa_require_totpRequire TOTP for loginAdvanced
totp_as_primary_authAllow TOTP-only loginAdvanced

Magic-Sessionmanager Configuration

Plugin Config

typescript
// config/plugins.ts
export default () => ({
  'magic-sessionmanager': {
    enabled: true,
    config: {
      // Rate limiting for "last seen" updates
      lastSeenRateLimit: 30000, // 30 seconds
      
      // When to mark sessions inactive
      inactivityTimeout: 900000, // 15 minutes
    },
  },
});

Environment Variables

bash
# Encryption key for JWT tokens in database
SESSION_ENCRYPTION_KEY=your-32-byte-base64-key

Generate a key:

bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

Admin Panel Settings

Navigate to Sessions → Settings:

General

SettingDescriptionDefault
Session TimeoutInactivity timeout15 min
Track IPStore IP addressestrue
Track User AgentStore browser infotrue

Refresh Token Protection

typescript
// config/plugins.ts
export default () => ({
  'users-permissions': {
    config: {
      jwtManagement: 'refresh', // Enable refresh tokens
      sessions: {
        accessTokenLifespan: 3600,      // 1 hour
        maxRefreshTokenLifespan: 2592000, // 30 days
      },
    },
  },
  'magic-sessionmanager': {
    enabled: true,
  },
});

Premium/Advanced Settings

SettingDescriptionLicense
IP GeolocationShow location dataPremium
Threat DetectionCheck IP reputationAdvanced
Auto-BlockingBlock suspicious IPsAdvanced
Email AlertsSend security emailsAdvanced
Webhook NotificationsDiscord/Slack alertsAdvanced

Magic-Mark Configuration

Plugin Config

typescript
// config/plugins.ts
export default () => ({
  'magic-mark': {
    enabled: true,
    config: {
      // Maximum bookmarks per user
      maxBookmarksPerUser: 50,
      
      // Enable query history
      enableHistory: true,
      
      // Auto-cleanup old queries (days)
      autoCleanupDays: 90,
    },
  },
});

Admin Panel Settings

SettingDescriptionDefault
Default EmojiDefault bookmark emoji📌
Enable SharingAllow bookmark sharingtrue
Public by DefaultNew bookmarks publicfalse

🌐 Multi-Plugin Configuration

Complete Setup Example

typescript
// config/plugins.ts
export default () => ({
  // Email management for all email needs
  'magic-mail': {
    enabled: true,
  },
  
  // Passwordless authentication
  'magic-link': {
    enabled: true,
    // Uses Magic-Mail automatically when available
  },
  
  // Session tracking
  'magic-sessionmanager': {
    enabled: true,
    config: {
      lastSeenRateLimit: 30000,
      inactivityTimeout: 900000,
    },
  },
  
  // Query bookmarks
  'magic-mark': {
    enabled: true,
    config: {
      maxBookmarksPerUser: 100,
    },
  },
  
  // Refresh token support for sessions
  'users-permissions': {
    config: {
      jwtManagement: 'refresh',
      sessions: {
        accessTokenLifespan: 3600,
        maxRefreshTokenLifespan: 2592000,
      },
    },
  },
});

Environment Variables (.env)

bash
# Magic-Sessionmanager
SESSION_ENCRYPTION_KEY=your-32-byte-base64-key

# Magic-Mail (optional)
ENCRYPTION_KEY=your-32-character-secret-key
URL=https://yourdomain.com

# Email settings (if using Strapi email plugin)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password

🔄 Configuration Priority

Settings are loaded in this order (later overrides earlier):

  1. Default values - Built-in defaults
  2. Plugin config - config/plugins.ts
  3. Environment variables - .env file
  4. Admin panel - Settings UI

TIP

Admin panel settings override all others, so you can use the UI for most configuration.


📖 Next Steps