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
- Have a workspace admin invite the user's exact email, then retry sign-up.
- If self-serve sign-up should be allowed, set ENABLE_SIGNUP=1 in the instance config/env and restart.
- 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
- Invite users before they sign up when ENABLE_SIGNUP=0
- Match the sign-up email exactly to the invite
- Set ENABLE_SIGNUP=1 if public self-serve is intended
- Document the invite-bypass rule for admins
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
- 5005
- 5021
- AUTH_USER_MISMATCH
- Authentication unsuccessful
- Invalid valueStop: ${anchorStop}. Must be one of ${SHADE_STO
AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12).
Data as JSON: /api/errors/8a370eed3ddf3c23.
Report an issue: GitHub.