Create Account & First Organization
Learn how to sign up for PaaSPortal, set up your account, and create your first organization to start managing Odoo projects.
Overview
PaaSPortal provides multiple authentication methods to create your account:
- Email/Password: Traditional registration with secure password requirements
- OAuth Providers: Sign up with GitHub, GitLab, Google, or Microsoft
- Passkeys (WebAuthn): Modern passwordless authentication using biometrics
Once registered, you'll automatically create your first organization or join an existing one via invitation.
Sign Up Process
Method 1: Email & Password Registration
The most straightforward way to create an account is using email and password.
Step-by-Step Registration
-
Navigate to Registration Page
- Visit
/auth/registeror click "Sign up" from the login page - Or directly access:
https://your-paasportal-domain.com/auth/register
- Visit
-
Fill in Your Details
- Full Name (optional): Your display name within PaaSPortal
- Email: A valid email address (used for login and notifications)
- Password: Must meet security requirements
- Confirm Password: Must match your password
-
Password Requirements
Your password must meet the following criteria:
- Minimum 8 characters
- At least one uppercase letter (A-Z)
- At least one lowercase letter (a-z)
- At least one number (0-9)
The registration form provides real-time validation feedback showing which requirements are met.
-
Submit Registration
- Click "Create account"
- You'll receive JWT tokens immediately and be logged in
- A verification email will be sent to your address
-
Email Verification
- Check your inbox for a verification email from PaaSPortal
- Click the verification link in the email
- Your account will be fully verified
- Note: You can use most features while unverified, but some organization-level actions may require verification
API Endpoint: Register with Email/Password
POST /api/v1/auth/register
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePass123",
"name": "John Doe"
}Response (201 Created):
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 3600,
"requires_onboarding": true,
"pending_invitations": 0
}Response Fields:
access_token: JWT token for API authentication (expires in 1 hour)refresh_token: Long-lived token to get new access tokensrequires_onboarding:trueif user needs to create/join an organizationpending_invitations: Number of pending organization invitations
Error Responses:
409 Conflict: Email already exists403 Forbidden: Email/password registration is disabled400 Bad Request: Invalid email format or password requirements not met
Frontend UI Walkthrough
The registration page (/auth/register) provides:
-
Form Fields:
- Full Name input with user icon
- Email input (locked if coming from invitation)
- Password input with show/hide toggle
- Confirm Password input with match indicator
-
Real-time Validation:
- Green checkmarks for met password requirements
- Red X for unmet requirements
- Password match indicator on confirm field
-
Submit Button:
- Disabled until all requirements are met
- Shows loading spinner during registration
- Displays "Create account" text
-
Additional Options:
- Link to login page for existing users
- OAuth provider options (GitHub, GitLab, Google, Microsoft)
- Links to Terms of Service and Privacy Policy
Method 2: OAuth Provider Registration
Sign up using your existing GitHub, GitLab, Google, or Microsoft account.
Supported OAuth Providers
PaaSPortal supports the following OAuth providers:
- GitHub: Authenticate with your GitHub account
- GitLab: Use your GitLab credentials
- Google: Sign up with your Google account
- Microsoft: Use your Microsoft/Azure AD account
OAuth Registration Flow
-
Choose Provider
- Go to
/auth/login - Click on your preferred OAuth provider button
- Go to
-
Authorize PaaSPortal
- You'll be redirected to the provider's authorization page
- Review the requested permissions:
- Basic profile information (name, email)
- Access to public repositories (for Git integrations)
- Click "Authorize" or "Allow"
-
Account Creation
- PaaSPortal receives your profile information
- If your email doesn't exist, a new account is created automatically
- You're logged in immediately
- Your profile picture is imported from the OAuth provider
-
First Login Redirect
- New users are redirected to
/onboarding - Existing users go to
/dashboard
- New users are redirected to
OAuth Provider Availability
Not all OAuth providers may be enabled on your PaaSPortal instance. The login page automatically detects and displays only available providers.
API Endpoint: Check Available Providers
GET /api/v1/auth/providersResponse:
{
"oauth_providers": ["github", "gitlab", "google", "microsoft"],
"email_password_enabled": true,
"passkey_enabled": true
}Method 3: Passkey Registration (Sprint 2E23)
Passkeys provide the most secure and convenient authentication method using biometrics.
What are Passkeys?
Passkeys are a modern, passwordless authentication standard (WebAuthn/FIDO2) that use:
- Face ID on iPhone/iPad
- Touch ID on Mac
- Windows Hello on Windows PCs
- Fingerprint on Android devices
- Hardware security keys (YubiKey, etc.)
Benefits of Passkeys
- More Secure: Resistant to phishing and credential theft
- More Convenient: No passwords to remember or type
- Faster Login: One touch or glance to authenticate
- Privacy-Focused: Biometric data never leaves your device
How to Register with Passkey
Important: You must first create an account using email/password or OAuth, then add a passkey.
-
Create Account
- Sign up using email/password or OAuth provider
- Complete the onboarding process
-
Navigate to Security Settings
- Go to Settings → Security
- Find the "Passkeys" section
-
Register New Passkey
- Click "Add Passkey"
- Enter a friendly name (e.g., "MacBook Pro", "iPhone")
- Your device will prompt for biometric authentication
- Complete the biometric verification
- Your passkey is now registered
-
Login with Passkey
- Go to
/auth/login - Click "Sign in with Passkey"
- Your device prompts for biometric authentication
- You're logged in instantly
- Go to
API Endpoints: Passkey Management
Generate Registration Options:
POST /api/v1/auth/passkeys/register/options
Authorization: Bearer <access_token>
Content-Type: application/json
{
"name": "MacBook Pro"
}Verify Registration:
POST /api/v1/auth/passkeys/register/verify
Authorization: Bearer <access_token>
Content-Type: application/json
{
"name": "MacBook Pro",
"credential": {
"id": "...",
"rawId": "...",
"response": { ... },
"type": "public-key"
}
}Login with Passkey:
POST /api/v1/auth/passkeys/login/options
Content-Type: application/json
{
"email": "user@example.com"
}POST /api/v1/auth/passkeys/login/verify
Content-Type: application/json
{
"challenge_id": "...",
"credential": {
"id": "...",
"rawId": "...",
"response": { ... },
"type": "public-key"
}
}First Login Experience
Login Process
Email & Password Login
-
Navigate to Login Page
- Visit
/auth/login - Enter your email address
- Enter your password
- Click "Sign in"
- Visit
-
Two-Factor Authentication (if enabled)
- If you've enabled 2FA, you'll see the verification screen
- Enter the 6-digit code from your authenticator app
- Or use one of your backup codes
- Click "Verify"
-
Successful Login
- Receive JWT tokens
- Redirected based on account status:
- New users without organizations →
/onboarding - Users with pending invitations →
/onboarding - Existing users →
/dashboard
- New users without organizations →
API Endpoint: Login
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePass123"
}Response (200 OK):
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 3600,
"requires_onboarding": false,
"pending_invitations": 0
}Response with 2FA Required:
{
"requires_2fa": true,
"temp_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Then verify 2FA:
POST /api/v1/auth/verify-2fa
Content-Type: application/json
{
"temp_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"code": "123456"
}Remember Me
The login page supports "Remember me" functionality:
- JWT tokens are stored in localStorage
- Access token expires in 1 hour
- Refresh token expires in 30 days
- Automatic token refresh on page load
- Logout clears all tokens
Forgot Password
If you forget your password:
- Click "Forgot password?" on the login page
- Enter your email address
- Click "Send reset link"
- Check your email for the reset link
- Click the link (expires in 60 minutes)
- Enter and confirm your new password
- Click "Reset password"
- Login with your new password
API Endpoint: Forgot Password
POST /api/v1/auth/forgot-password
Content-Type: application/json
{
"email": "user@example.com"
}API Endpoint: Reset Password
POST /api/v1/auth/reset-password
Content-Type: application/json
{
"token": "reset_token_from_email",
"password": "NewSecurePass123"
}Create First Organization
Automatic Organization Creation
After your first successful login, you'll be redirected to the onboarding page where you can:
- Create a new organization
- Join an existing organization (via invitation)
Creating Your Organization
Step-by-Step Guide
-
Onboarding Welcome Screen
- After first login, you'll see the welcome screen
- Two options are presented:
- "Create a new organization"
- "I have an invitation code"
-
Choose "Create a new organization"
- Click the "Create a new organization" card
- You'll be taken to the organization creation form
-
Enter Organization Details
- Organization Name: Enter a descriptive name (e.g., "Acme Corporation")
- The system will automatically generate a URL-friendly slug
- Example: "Acme Corporation" →
acme-corporation
-
Submit
- Click "Create Organization"
- Your organization is created instantly
- You're assigned the
OWNERrole automatically - Redirected to the dashboard
Organization Naming Guidelines
- Use a clear, descriptive name
- Maximum 255 characters
- Can include spaces, letters, numbers, and special characters
- The slug is auto-generated and must be unique
Good examples:
- "Acme Web Solutions"
- "Digital Marketing Pro"
- "Smith & Associates"
Avoid:
- Generic names like "Test" or "Company"
- Very long names that are hard to read
- Special characters that might cause URL issues
API Endpoint: Create Organization
POST /api/v1/organizations
Authorization: Bearer <access_token>
Content-Type: application/json
{
"name": "Acme Corporation",
"description": "Leading provider of web solutions",
"website": "https://acme.com"
}Response (201 Created):
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Acme Corporation",
"slug": "acme-corporation",
"description": "Leading provider of web solutions",
"website": "https://acme.com",
"logo_url": null,
"is_active": true,
"billing_email": null,
"stripe_customer_id": null,
"max_projects": 10,
"max_environments": 30,
"max_servers": 5,
"max_members": 20,
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-15T10:00:00Z"
}Joining an Existing Organization
Via Invitation Link
If you received an invitation link via email:
-
Click the Invitation Link
- Format:
https://paasportal.com/onboarding?token=INVITATION_TOKEN - Opens the invitation preview page
- Format:
-
Sign In or Create Account
- If not logged in, you'll see two options:
- "Sign In to Accept"
- "Create Account"
- Choose your preferred method
- If not logged in, you'll see two options:
-
Automatic Acceptance
- After authentication, the invitation is automatically accepted
- You're added to the organization
- Redirected to the dashboard
Via Invitation Code
If you have a 6-character invitation code:
-
Onboarding Welcome Screen
- Click "I have an invitation code"
-
Enter the Code
- Type the 6-character code (e.g.,
ABC123) - The input automatically converts to uppercase
- Code is validated in real-time
- Type the 6-character code (e.g.,
-
Validate and Accept
- Click "Validate Code"
- Review the organization details shown
- Click "Join Organization"
- You're added to the organization
- Redirected to the dashboard
API Endpoint: Validate Invitation
POST /api/v1/invitations/validate
Content-Type: application/json
{
"code": "ABC123"
}Response:
{
"valid": true,
"organization_name": "Acme Corporation",
"organization_slug": "acme-corporation",
"message": "Welcome to our team!",
"scope": "organization",
"expires_at": "2025-02-15T10:00:00Z",
"restricted_email": null,
"projects": null
}API Endpoint: Accept Invitation
POST /api/v1/invitations/accept
Authorization: Bearer <access_token>
Content-Type: application/json
{
"code": "ABC123"
}Slug Generation Rules
When you create an organization, PaaSPortal automatically generates a unique slug:
- Converts name to lowercase
- Replaces spaces with hyphens
- Removes special characters
- Ensures uniqueness by appending numbers if needed
Examples:
| Organization Name | Generated Slug |
|---|---|
| Acme Corporation | acme-corporation |
| Smith & Associates | smith-associates |
| Digital Marketing Pro | digital-marketing-pro |
| Test | test-1 (if "test" exists) |
Account Settings
Once your account is created, you can customize your profile and preferences.
Profile Settings
Accessing Profile Settings
- Click your avatar in the top-right corner
- Select "Settings" from the dropdown
- Navigate to the "Profile" tab
Available Profile Settings
Personal Information
- Full Name: Your display name throughout PaaSPortal
- Email: Your primary email address (requires verification to change)
- Avatar: Upload a custom profile picture or use OAuth provider's image
API Endpoint: Update Profile
PATCH /api/v1/users/me
Authorization: Bearer <access_token>
Content-Type: application/json
{
"name": "John Smith",
"avatar_url": "https://example.com/avatar.jpg"
}Avatar Upload
You can upload a custom avatar:
- Supported formats: JPG, PNG, GIF, WebP
- Maximum size: 2MB
- Recommended dimensions: 256x256 pixels
- Square images work best
Timezone Settings
Set your timezone for accurate timestamps:
- Go to Settings → Preferences
- Select your timezone from the dropdown
- All dates and times will be displayed in your timezone
- Affects: deployment logs, backup schedules, notifications
Supported Timezones:
- All IANA timezone database entries
- Examples:
America/New_York,Europe/London,Asia/Tokyo
Notification Preferences
Customize which notifications you receive:
Email Notifications
Configure email notifications for:
- Deployment Events: Success, failure, or progress updates
- Backup Events: Backup completion or failures
- System Alerts: Resource warnings, quota limits
- Team Activity: Invitations, member changes
- Security Alerts: Login from new device, password changes
Notification Channels
- Email: Sent to your registered email
- In-App: Bell icon in the top navigation
- Webhook: Configure custom webhook URLs (organization-level)
API Endpoint: Update Notification Preferences
PATCH /api/v1/users/me/notification-preferences
Authorization: Bearer <access_token>
Content-Type: application/json
{
"email_enabled": true,
"deployment_notifications": true,
"backup_notifications": true,
"alert_notifications": true,
"team_notifications": true
}Language & Region
Set your preferred language and regional formats:
- Language: Interface language (English, Spanish, French, etc.)
- Date Format: MM/DD/YYYY, DD/MM/YYYY, YYYY-MM-DD
- Time Format: 12-hour or 24-hour
- Number Format: Decimal and thousands separators
Security Setup
PaaSPortal provides multiple layers of security to protect your account.
Two-Factor Authentication (2FA/TOTP)
Add an extra layer of security with time-based one-time passwords.
Enabling 2FA
-
Navigate to Security Settings
- Go to Settings → Security
- Find "Two-Factor Authentication" section
- Click "Enable 2FA"
-
Scan QR Code
- A QR code is displayed
- Open your authenticator app:
- Google Authenticator
- Microsoft Authenticator
- Authy
- 1Password
- Any TOTP-compatible app
- Scan the QR code
-
Enter Verification Code
- Your authenticator generates a 6-digit code
- Enter the code in PaaSPortal
- Click "Verify and Enable"
-
Save Backup Codes
- You'll receive 8 backup codes
- IMPORTANT: Save these in a secure location
- Each code can be used once
- Use them if you lose access to your authenticator
Using 2FA During Login
Once 2FA is enabled:
- Enter email and password as usual
- You'll see the 2FA verification screen
- Enter the 6-digit code from your authenticator app
- Or use one of your backup codes
- Click "Verify"
- You're logged in
API Endpoints: 2FA Management
Setup 2FA:
POST /api/v1/auth/2fa/setup
Authorization: Bearer <access_token>Response:
{
"secret": "YOUR_TOTP_SECRET_BASE32_ENCODED",
"qr_uri": "otpauth://totp/PaaSPortal:user@example.com?secret=YOUR_TOTP_SECRET_BASE32_ENCODED&issuer=PaaSPortal",
"backup_codes": [
"A1B2C3D4",
"E5F6G7H8",
"I9J0K1L2",
"M3N4O5P6",
"Q7R8S9T0",
"U1V2W3X4",
"Y5Z6A7B8",
"C9D0E1F2"
]
}Enable 2FA:
POST /api/v1/auth/2fa/enable
Authorization: Bearer <access_token>
Content-Type: application/json
{
"code": "123456"
}Disable 2FA:
POST /api/v1/auth/2fa/disable
Authorization: Bearer <access_token>
Content-Type: application/json
{
"code": "123456",
"password": "SecurePass123"
}Regenerate Backup Codes:
POST /api/v1/auth/2fa/regenerate-backup-codes
Authorization: Bearer <access_token>
Content-Type: application/json
{
"code": "123456"
}Response:
{
"backup_codes": [
"X1Y2Z3A4",
"B5C6D7E8",
"F9G0H1I2",
"J3K4L5M6",
"N7O8P9Q0",
"R1S2T3U4",
"V5W6X7Y8",
"Z9A0B1C2"
]
}Backup Codes
Backup codes are single-use codes for account recovery:
- Total Codes: 8 codes provided
- Format: 8 uppercase alphanumeric characters
- Usage: Each code can be used only once
- Regeneration: You can generate new codes anytime
- Warning: Regenerating invalidates all previous codes
When to Use Backup Codes:
- Lost your phone with authenticator app
- Authenticator app not working
- Device is being repaired
- Traveling without your primary device
Best Practices:
- Print backup codes and store in a safe place
- Don't store them digitally in an unsecured location
- Regenerate codes periodically (every 3-6 months)
- Track which codes you've used
OAuth Provider Connections
Link multiple OAuth accounts to your PaaSPortal account.
Benefits of Linking OAuth Providers
- Sign in using any linked provider
- Access repositories from multiple platforms
- Backup authentication method
- No password required for linked providers
How to Link OAuth Provider
- Go to Settings → Security
- Find "Connected Accounts" section
- Click "Connect" next to a provider (GitHub, GitLab, Google, Microsoft)
- Authorize PaaSPortal
- Provider is now linked
Managing Connected Accounts
- View all connected providers
- See last login date for each provider
- Disconnect providers (requires at least one login method)
- Primary email syncs across all providers
API Endpoints: OAuth Management
List OAuth Accounts:
GET /api/v1/users/me/oauth-accounts
Authorization: Bearer <access_token>Response:
[
{
"id": "...",
"provider": "github",
"provider_username": "johndoe",
"created_at": "2025-01-15T10:00:00Z",
"last_used_at": "2025-01-20T15:30:00Z"
}
]Passkeys (WebAuthn) - Sprint 2E23
Passkeys provide the most secure authentication method.
Why Use Passkeys?
- Phishing Resistant: Cannot be stolen by fake login pages
- No Passwords: Nothing to forget or leak
- Device-Bound: Uses your device's secure enclave
- Biometric: Face ID, Touch ID, or fingerprint
- Multi-Device: Sync across devices via iCloud Keychain, etc.
Adding Multiple Passkeys
You can register multiple passkeys:
- MacBook Pro (Touch ID)
- iPhone (Face ID)
- Windows PC (Windows Hello)
- YubiKey (hardware security key)
- Android phone (fingerprint)
Managing Passkeys
-
View All Passkeys
- Go to Settings → Security → Passkeys
- See all registered passkeys with:
- Name (e.g., "MacBook Pro")
- Created date
- Last used date
- Device type (single-device vs. multi-device)
-
Rename Passkey
- Click the edit icon
- Enter a new name
- Click "Save"
-
Delete Passkey
- Click the delete icon
- Confirm deletion
- Passkey is removed
Important: Always keep at least one authentication method active (password, OAuth, or passkey).
API Endpoints: Passkey Management
List Passkeys:
GET /api/v1/auth/passkeys
Authorization: Bearer <access_token>Response:
{
"passkeys": [
{
"id": "...",
"name": "MacBook Pro",
"created_at": "2025-01-15T10:00:00Z",
"last_used_at": "2025-01-20T15:30:00Z",
"backup_eligible": true,
"backup_state": true,
"credential_device_type": "multi_device"
}
],
"count": 1
}Rename Passkey:
PUT /api/v1/auth/passkeys/{passkey_id}
Authorization: Bearer <access_token>
Content-Type: application/json
{
"name": "iPhone 15 Pro"
}Delete Passkey:
DELETE /api/v1/auth/passkeys/{passkey_id}
Authorization: Bearer <access_token>Security Best Practices
Follow these recommendations to keep your account secure:
-
Enable 2FA
- Use an authenticator app, not SMS
- Save backup codes securely
- Regenerate codes periodically
-
Use Strong Passwords
- Minimum 12 characters recommended
- Mix of uppercase, lowercase, numbers, symbols
- Avoid common words or patterns
- Use a password manager
-
Register Passkeys
- Most secure authentication method
- Register on multiple devices
- Use hardware security keys for critical accounts
-
Monitor Account Activity
- Review login history regularly
- Check for unfamiliar devices
- Immediately disable 2FA and change password if suspicious
-
Link Multiple OAuth Providers
- Provides backup login methods
- Reduces reliance on passwords
- Easier account recovery
-
Keep Recovery Information Updated
- Verify your email is current
- Save backup codes in a safe place
- Register multiple passkeys
Troubleshooting
Registration Issues
Issue 1: "An account with this email already exists"
Cause: You've already registered with this email, or someone else is using it.
Solution:
- Try logging in instead of registering
- Use the "Forgot password?" link if you don't remember your password
- Check if you signed up using an OAuth provider (GitHub, GitLab, etc.)
- If you believe this is an error, contact support
Issue 2: Password doesn't meet requirements
Cause: Your password is too weak or doesn't meet the security criteria.
Solution:
- Ensure your password has at least 8 characters
- Include at least one uppercase letter (A-Z)
- Include at least one lowercase letter (a-z)
- Include at least one number (0-9)
- Example of valid password:
SecurePass123
Good password examples:
MySecure2025Pass!BlueSky#Mountains99Coffee@Morning2024
Avoid:
password123(too common)12345678(only numbers)abcdefgh(no numbers or uppercase)
Issue 3: Verification email not received
Cause: Email may be delayed, in spam folder, or blocked by your mail server.
Solution:
- Check your spam/junk folder
- Wait 5-10 minutes (email delivery can be delayed)
- Add
noreply@paasportal.ioto your contacts - Check if your email provider blocks automated emails
- Request a new verification email:
POST /api/v1/auth/resend-verification
Authorization: Bearer <access_token>
Content-Type: application/json
{
"email": "user@example.com"
}Issue 4: OAuth provider authorization fails
Cause: OAuth provider is not configured, or authorization was denied.
Solution:
- Try a different OAuth provider
- Clear browser cookies and try again
- Check if you denied the authorization request
- Ensure your OAuth account has a verified email
- If problem persists, use email/password registration instead
Issue 5: Registration page shows "Registration disabled"
Cause: Email/password registration is disabled by the administrator.
Solution:
- Use an OAuth provider (GitHub, GitLab, Google, Microsoft)
- Contact your administrator to enable email/password registration
- Check if you're on a custom deployment with restricted registration
Login Issues
Issue 1: "Invalid email or password"
Cause: Incorrect credentials entered.
Solution:
- Double-check your email for typos
- Ensure Caps Lock is off when typing password
- Try the "Forgot password?" link to reset
- If you signed up with OAuth, use the OAuth login button instead
- Check if you have multiple accounts with different emails
Issue 2: 2FA code not working
Cause: Code expired, clock sync issue, or incorrect code.
Solution:
- Wait for a new code to generate (codes change every 30 seconds)
- Ensure your device's clock is accurate (TOTP requires time sync)
- Try entering the code immediately after it appears
- Use a backup code if available
- Contact support if you've lost access to your authenticator
To use backup code:
- Enter one of your 8-character backup codes instead of 6-digit TOTP code
- Backup codes are single-use only
Issue 3: Account locked after multiple failed attempts
Cause: Too many failed login attempts triggered rate limiting.
Solution:
- Wait 15-30 minutes before trying again
- Use the "Forgot password?" flow to reset your password
- Contact support if you believe your account was compromised
Issue 4: "Account is deactivated"
Cause: Your account has been deactivated by an administrator.
Solution:
- Contact your organization administrator
- Contact PaaSPortal support
- Check your email for any account suspension notices
Issue 5: Passkey authentication fails
Cause: Passkey not recognized, browser incompatibility, or device issue.
Solution:
- Ensure you're on a supported browser (Chrome, Edge, Safari, Firefox)
- Check if your device supports WebAuthn/FIDO2
- Try a different passkey if you have multiple registered
- Use email/password or OAuth as a fallback
- Re-register the passkey in Settings
Organization Creation Issues
Issue 1: "Organization name already taken"
Cause: Another organization with the same slug exists.
Solution:
- Choose a more specific organization name
- Add a suffix like your city or company identifier
- System will automatically add a number suffix if needed
Issue 2: Cannot create organization after accepting invitation
Cause: You're already a member of an organization.
Solution:
- You can create additional organizations from the dashboard
- Navigate to the organization switcher (top-left dropdown)
- Click "Create new organization"
- Or leave your current organization first (requires non-owner role)
Issue 3: Slug generation creates unwanted URL
Cause: Auto-generated slug doesn't match your preference.
Solution:
- Slugs are auto-generated and cannot be customized during creation
- Contact support to request a slug change after creation
- Choose an organization name that generates your desired slug
Email Verification Issues
Issue 1: Verification link expired
Cause: Verification links expire after 24 hours.
Solution:
- Request a new verification email
- Click the link immediately after receiving it
- Check that you're clicking the most recent link
API Endpoint: Resend Verification Email
POST /api/v1/auth/resend-verification
Authorization: Bearer <access_token>Issue 2: "Invalid verification token"
Cause: Link was already used or is malformed.
Solution:
- Request a new verification email
- Ensure you copied the complete link from your email
- Don't click the link multiple times
- Check if you're already verified in Settings
Issue 3: Verification email goes to wrong address
Cause: Email was changed after registration.
Solution:
- Verification emails are always sent to your registered email
- Change your email in Settings, then verify the new address
- Cannot verify an old email address
Getting Help
If you're still experiencing issues:
- Check System Status: Visit the status page for known issues
- Documentation: Search this documentation for specific topics
- Community Forum: Ask questions in the community forum
- Support Tickets: Contact support with your issue details
- Email: Send an email to support@paasportal.io
When contacting support, include:
- Your email address (not password)
- Description of the issue
- Steps to reproduce the problem
- Browser and device information
- Screenshots (if applicable)
- Any error messages received
Next Steps
Now that you've created your account and organization, here's what to do next:
Immediate Actions
-
Complete Email Verification
- Check your inbox and verify your email
- Enables full account functionality
-
Set Up 2FA
- Go to Settings → Security
- Enable two-factor authentication
- Save your backup codes
-
Customize Your Profile
- Update your display name
- Upload an avatar
- Set your timezone
-
Invite Team Members
- Go to Settings → Members
- Send invitations to your team
- Assign appropriate roles
Getting Started with PaaSPortal
Continue your journey with these guides:
- Add Your First Server - Connect a server to host your projects
- Create Your First Project - Set up an Odoo project
- Deploy an Environment - Deploy your first Odoo instance
- Configure Git Integration - Connect your Git repository
- Set Up Backups - Configure automated backups
Learn More
Explore additional documentation:
- Organization Management - Manage your organization
- Permission System - Understand roles and permissions
- Billing & Plans - Subscription plans and pricing
- API Reference - Integrate with the PaaSPortal API
- Security Best Practices - Keep your account secure
Join the Community
- Discord Server: Join our Discord for real-time help
- GitHub Discussions: Share ideas and feedback
- Twitter: Follow @PaaSPortal (opens in a new tab) for updates
- Blog: Read tutorials and case studies
Security & Privacy
Data Protection
PaaSPortal takes security seriously:
- Password Hashing: Bcrypt with high work factor
- Token Security: JWT with short expiration times
- 2FA Support: TOTP-based two-factor authentication
- Passkey Support: WebAuthn/FIDO2 for passwordless auth
- OAuth Security: Industry-standard OAuth 2.0 flows
- Audit Logging: All account actions are logged
- Encryption: Data encrypted in transit (TLS 1.3)
Privacy Policy
- Your email is only used for authentication and notifications
- Profile information is visible only to your organization members
- OAuth tokens are encrypted and never logged
- Biometric data (passkeys) never leaves your device
- Account can be deleted at any time from Settings
Compliance
PaaSPortal is designed with compliance in mind:
- GDPR: Right to access and delete personal data
- CCPA: California privacy rights supported
- SOC 2: Type II compliance in progress
- Data Residency: Choose your data location
Frequently Asked Questions
Can I use multiple email addresses?
You can only have one primary email per account, but you can link multiple OAuth providers that may use different emails.
What happens if I forget my password and lose 2FA access?
Use one of your backup codes. If you've lost your backup codes, contact support with proof of identity.
Can I transfer organization ownership?
Yes, organization owners can transfer ownership to another member from Settings → Members.
How many organizations can I create?
You can create unlimited organizations, but each organization has its own resource quotas and billing.
Can I delete my account?
Yes, go to Settings → Account → Delete Account. This action is permanent and cannot be undone.
What happens to my data if I delete my account?
All your personal data is deleted. If you're the owner of organizations, you must transfer ownership or delete them first.
Can I change my email address?
Yes, go to Settings → Profile → Change Email. You'll need to verify the new email address.
Do I need to verify my email to use PaaSPortal?
Most features work without verification, but some organization-level actions require a verified email.
Can I use PaaSPortal without a password?
Yes, if you sign up using OAuth or register a passkey, you never need to set a password.
Is passkey support available on all browsers?
Passkeys work on modern browsers: Chrome 67+, Edge 18+, Safari 13+, Firefox 60+. Mobile browsers also support passkeys.
Need help? Contact our support team at support@paasportal.io or visit our Help Center.
Last Updated: January 2025 (Sprint 2E42 - Phase 1)