refactor(signup): remove firstName/lastName fields (DSGVO data-minimization)

Felder wurden nirgendwo gelesen/angezeigt (nur in raw_user_meta_data
gespeichert ohne Verwendung). Inkonsistent mit OAuth-Flow der sie
gar nicht erfasst. Entfernt:
- 2 Inputs aus signup.tsx
- firstName/lastName aus signUp metadata-Typ + data
- 8 i18n-keys (de/en/fr/ar)
- DB-Cleanup via SQL für 5 existing User (raw_user_meta_data - 'first_name' - 'last_name')

Art. 5(1)c DSGVO: nur Daten verarbeiten die für Zweck notwendig sind.
Nickname allein reicht — Anonymität-Pattern (memory/feedback_anonymity_nickname.md).
This commit is contained in:
chahinebrini 2026-05-19 11:05:18 +02:00
parent 512949f851
commit 12e140e25b
6 changed files with 1 additions and 36 deletions

View File

@ -53,8 +53,6 @@ export default function SignUpScreen() {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
const [nickname, setNickname] = useState('');
const [avatarId, setAvatarId] = useState('spider');
const [termsAccepted, setTermsAccepted] = useState(false);
@ -93,8 +91,6 @@ export default function SignUpScreen() {
setSubmitting(true);
const res = await signUp(email.trim(), password, {
username: nickname.trim(),
firstName: firstName.trim() || undefined,
lastName: lastName.trim() || undefined,
avatarId,
avatarUrl: getAvatarUrl(avatarId),
});
@ -186,27 +182,6 @@ export default function SignUpScreen() {
onChangeText={setPassword}
/>
<View className="flex-row gap-3 mb-3">
<TextInput
className="flex-1 bg-neutral-100 rounded-xl"
style={INPUT_STYLE}
placeholder={t('auth.firstName')}
placeholderTextColor="#a3a3a3"
autoComplete="given-name"
value={firstName}
onChangeText={setFirstName}
/>
<TextInput
className="flex-1 bg-neutral-100 rounded-xl"
style={INPUT_STYLE}
placeholder={t('auth.lastName')}
placeholderTextColor="#a3a3a3"
autoComplete="family-name"
value={lastName}
onChangeText={setLastName}
/>
</View>
<TextInput
className="bg-neutral-100 rounded-xl mb-6"
style={INPUT_STYLE}

View File

@ -28,8 +28,6 @@
"passwordRequired": "كلمة المرور * (8 أحرف على الأقل)",
"passwordMin8": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل.",
"newPassword": "كلمة مرور جديدة",
"firstName": "الاسم الأول",
"lastName": "اسم العائلة",
"nickname": "اسم المستخدم",
"nicknamePlaceholder": "اسم المستخدم * (مرئي للآخرين)",
"noAccount": "ليس لديك حساب؟",

View File

@ -28,8 +28,6 @@
"passwordRequired": "Passwort * (min. 8 Zeichen)",
"passwordMin8": "Passwort muss mindestens 8 Zeichen haben.",
"newPassword": "Neues Passwort",
"firstName": "Vorname",
"lastName": "Nachname",
"nickname": "Benutzername",
"nicknamePlaceholder": "Benutzername * (sichtbar für andere)",
"noAccount": "Noch kein Konto?",

View File

@ -28,8 +28,6 @@
"passwordRequired": "Password * (min. 8 characters)",
"passwordMin8": "Password must be at least 8 characters.",
"newPassword": "New password",
"firstName": "First name",
"lastName": "Last name",
"nickname": "Username",
"nicknamePlaceholder": "Username * (visible to others)",
"noAccount": "No account yet?",

View File

@ -28,8 +28,6 @@
"passwordRequired": "Mot de passe * (min. 8 caractères)",
"passwordMin8": "Le mot de passe doit comporter au moins 8 caractères.",
"newPassword": "Nouveau mot de passe",
"firstName": "Prénom",
"lastName": "Nom",
"nickname": "Pseudo",
"nicknamePlaceholder": "Pseudo * (visible par les autres)",
"noAccount": "Pas encore de compte ?",

View File

@ -47,7 +47,7 @@ type AuthState = {
signUp: (
email: string,
password: string,
metadata: { username: string; firstName?: string; lastName?: string; avatarId: string; avatarUrl: string }
metadata: { username: string; avatarId: string; avatarUrl: string }
) => Promise<{ error?: string }>;
signOut: () => Promise<void>;
signInWithOAuth: (provider: 'google' | 'apple') => Promise<{ error?: string }>;
@ -124,8 +124,6 @@ export const useAuthStore = create<AuthState>((set) => ({
options: {
data: {
username: metadata.username,
first_name: metadata.firstName ?? '',
last_name: metadata.lastName ?? '',
avatar_id: metadata.avatarId,
avatar_url: metadata.avatarUrl,
locale: currentLocale(),