makeplane/plane · error · AuthenticationException

5015

5015

Error message

SIGNUP_DISABLED

What it means

The private __check_signup reads ENABLE_SIGNUP from configuration/env (default '1'). When ENABLE_SIGNUP == '0' AND no WorkspaceMemberInvite exists for the email, AuthenticationException code 5015 (SIGNUP_DISABLED) is raised. If an invite exists, signup is allowed even with ENABLE_SIGNUP off — invites bypass the global gate.

Source

Thrown at apps/api/plane/authentication/adapter/base.py:114

                error_code=AUTHENTICATION_ERROR_CODES["PASSWORD_TOO_WEAK"],
                error_message="PASSWORD_TOO_WEAK",
                payload={"email": email},
            )
        return

    def __check_signup(self, email):
        """Check if sign up is enabled or not and raise exception if not enabled"""

        # Get configuration value
        (ENABLE_SIGNUP,) = get_configuration_value([
            {"key": "ENABLE_SIGNUP", "default": os.environ.get("ENABLE_SIGNUP", "1")}
        ])

        # Check if sign up is disabled and invite is present or not
        if ENABLE_SIGNUP == "0" and not WorkspaceMemberInvite.objects.filter(email=email).exists():
            self.logger.warning("Sign up is disabled and invite is not present")
            # Raise exception
            raise AuthenticationException(
                error_code=AUTHENTICATION_ERROR_CODES["SIGNUP_DISABLED"],
                error_message="SIGNUP_DISABLED",
                payload={"email": email},
            )

        return True

    def get_avatar_download_headers(self):
        return {}

    def check_sync_enabled(self):
        """Check if sync is enabled for the provider"""
        provider_config_map = {
            "google": "ENABLE_GOOGLE_SYNC",
            "github": "ENABLE_GITHUB_SYNC",
            "gitlab": "ENABLE_GITLAB_SYNC",
            "gitea": "ENABLE_GITEA_SYNC",
        }

View on GitHub (pinned to 1c8a60f858)

Solutions

  1. Have a workspace admin invite the user's exact email, then retry sign-up.
  2. If self-serve sign-up should be allowed, set ENABLE_SIGNUP=1 in the instance config/env and restart.
  3. Confirm the sign-up email exactly matches the invited email (the invite lookup is case-sensitive after lowercasing).

Example fix

# before (env)
ENABLE_SIGNUP=0
# user tries to sign up uninvited -> SIGNUP_DISABLED

# after (option A: invite)
admin invites user@example.com -> user signs up with that exact email
# after (option B: open signup)
ENABLE_SIGNUP=1  # then restart the web service
Defensive patterns

Strategy: validation

Validate before calling

from django.conf import settings
import os
ENABLE_SIGNUP = os.environ.get('ENABLE_SIGNUP', '1')
if ENABLE_SIGNUP == '0' and not WorkspaceMemberInvite.objects.filter(email=email).exists():
    return bad_request('Signup disabled; ask your admin to invite you')

Try / catch

try:
    adapter._BaseAdapter__check_signup(email)
except AuthenticationException as e:
    if e.error_code == 5015:
        return bad_request('Sign-up is disabled. Request an invite.')
    raise

Prevention

When it happens

Trigger: Self-serve sign-up attempt on an instance where ENABLE_SIGNUP=0 and the user's email has not been invited to any workspace.

Common situations: Enterprise/SSO-only deployments disabling public sign-up; admin forgot to invite a user before they try to register; email mismatch between invite and sign-up attempt (case/typo).

Related errors


AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12). Data as JSON: /api/errors/8a370eed3ddf3c23. Report an issue: GitHub.