forked from baron/baron-sso
- Database: Add user_login_ids table for 1:N identifier mapping and remove legacy login_id column - Kratos: Update identity schema to use custom_login_ids array instead of a single id trait - Backend: Implement syncCustomLoginIDs to collect isLoginId fields across tenant schemas - Backend: Add backtracking logic to auto-assign session tenant based on used login identifier - Backend: Add 409 Conflict exception handling for Create/Update operations - AdminFront: Refactor UserDetailPage to a tabbed grid layout (Info, Tenants, Security) - AdminFront: Show '로그인 ID' badge on tenant schema fields used for authentication - UserFront: Remove legacy optional 'Login ID' input from signup flow - Tests: Add multi-identifier repository tests and update handler tests
127 lines
2.9 KiB
JSON
127 lines
2.9 KiB
JSON
{
|
|
"$id": "https://schemas.ory.sh/presets/kratos/identity.email.schema.json",
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "Person",
|
|
"type": "object",
|
|
"properties": {
|
|
"traits": {
|
|
"type": "object",
|
|
"properties": {
|
|
"custom_login_ids": {
|
|
"type": "array",
|
|
"title": "Custom Login IDs",
|
|
"items": {
|
|
"type": "string",
|
|
"ory.sh/kratos": {
|
|
"credentials": {
|
|
"password": {
|
|
"identifier": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"format": "email",
|
|
"title": "E-Mail",
|
|
"minLength": 3,
|
|
"ory.sh/kratos": {
|
|
"credentials": {
|
|
"password": {
|
|
"identifier": true
|
|
},
|
|
"code": {
|
|
"identifier": true,
|
|
"via": "email"
|
|
}
|
|
},
|
|
"recovery": {
|
|
"via": "email"
|
|
},
|
|
"verification": {
|
|
"via": "email"
|
|
}
|
|
}
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"phone_number": {
|
|
"type": "string",
|
|
"title": "Phone Number",
|
|
"minLength": 7,
|
|
"ory.sh/kratos": {
|
|
"credentials": {
|
|
"password": {
|
|
"identifier": true
|
|
},
|
|
"code": {
|
|
"identifier": true,
|
|
"via": "sms"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"department": {
|
|
"type": "string",
|
|
"title": "Department"
|
|
},
|
|
"affiliationType": {
|
|
"type": "string",
|
|
"title": "Affiliation Type"
|
|
},
|
|
"companyCode": {
|
|
"type": "string",
|
|
"title": "Company Code"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"title": "Role"
|
|
},
|
|
"tenant_id": {
|
|
"type": "string",
|
|
"title": "Tenant ID"
|
|
},
|
|
"displayname": {
|
|
"type": "string",
|
|
"title": "Display Name"
|
|
},
|
|
"completeForm": {
|
|
"type": "boolean",
|
|
"title": "Complete Form"
|
|
},
|
|
"team": {
|
|
"type": "string",
|
|
"title": "Team"
|
|
},
|
|
"taxCode": {
|
|
"type": "string",
|
|
"title": "Tax Code"
|
|
},
|
|
"familyCompany": {
|
|
"type": "string",
|
|
"title": "Family Company"
|
|
},
|
|
"familyUniqueKey": {
|
|
"type": "string",
|
|
"title": "Family Unique Key"
|
|
},
|
|
"personal": {
|
|
"type": "boolean",
|
|
"title": "Personal"
|
|
},
|
|
"grade": {
|
|
"type": "string",
|
|
"title": "Grade"
|
|
}
|
|
},
|
|
"required": [
|
|
"email"
|
|
],
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
}
|