website: Copy files during build. website: Allow for mixed env builds. website: Reduce build size. website: Expose build. website: Add build memory debugging. WIP: Disable broken links check to compare memory usage. website: Update deps. website: Clean up API paths. website: Flesh out 3.8 fixes. Format. website: Update ignore paths. Website: Clean up integrations build. website: Fix paths. website: Optimize remark. website: Update deps. website: Format. website: Remove linking. website: Fix paths. wip: Attempt API only build. Prep. Migrate render to runtime. Tidy sidebar. Clean up templates. docs: Move directory. WIP docs: Flesh out split. website: Fix issue where routes have collisions.
20 lines
806 B
Markdown
20 lines
806 B
Markdown
---
|
|
title: Ensure unique email addresses
|
|
---
|
|
|
|
Due to the database design of authentik, email addresses are by default not required to be unique. This behavior can however be changed by policies.
|
|
|
|
The snippet below can be used as the expression in policies both with enrollment flows, where the policy should be bound to any stage before the [User write](../../../add-secure-apps/flows-stages/stages/user_write.md) stage, or with the [Prompt stage](../../../add-secure-apps/flows-stages/stages/prompt/index.md).
|
|
|
|
```python
|
|
from authentik.core.models import User
|
|
|
|
# Ensure this matches the *Field Key* value of the prompt
|
|
field_name = "email"
|
|
email = request.context["prompt_data"][field_name]
|
|
if User.objects.filter(email=email).exists():
|
|
ak_message("Email address in use")
|
|
return False
|
|
return True
|
|
```
|