Files
harheimertc/pages/login.vue
Torsten Schulz (local) d12380ee72
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 48s
Temporarily disable Passkey functionality in login and registration components
Remove Passkey login and registration features from login.vue and registrieren.vue, including associated debug logs and UI elements. This change aims to streamline the user experience by focusing on standard login methods while Passkey support is under review. Additionally, disable Passkey management in profil.vue to ensure consistency across the application.
2026-01-09 08:40:28 +01:00

183 lines
5.3 KiB
Vue

<template>
<div class="min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50">
<div class="max-w-md w-full space-y-8">
<div class="text-center">
<h2 class="text-3xl font-display font-bold text-gray-900">
Mitglieder-Login
</h2>
<p class="mt-2 text-sm text-gray-600">
Melden Sie sich an, um auf den Mitgliederbereich zuzugreifen
</p>
</div>
<div class="bg-white rounded-xl shadow-lg p-8">
<form
class="space-y-6"
@submit.prevent="handleLogin"
>
<!-- Email -->
<div>
<label
for="email"
class="block text-sm font-medium text-gray-700 mb-2"
>
E-Mail-Adresse
</label>
<input
id="email"
v-model="formData.email"
type="email"
required
autocomplete="email"
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all"
:class="{ 'border-red-500': errorMessage }"
placeholder="ihre-email@example.com"
>
</div>
<!-- Password -->
<div>
<label
for="password"
class="block text-sm font-medium text-gray-700 mb-2"
>
Passwort
</label>
<input
id="password"
v-model="formData.password"
type="password"
required
autocomplete="current-password"
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all"
:class="{ 'border-red-500': errorMessage }"
placeholder="••••••••"
>
</div>
<!-- Error Message -->
<div
v-if="errorMessage"
class="bg-red-50 border border-red-200 rounded-lg p-4"
>
<p class="text-sm text-red-800 flex items-center">
<AlertCircle
:size="18"
class="mr-2"
/>
{{ errorMessage }}
</p>
</div>
<!-- Success Message -->
<div
v-if="successMessage"
class="bg-green-50 border border-green-200 rounded-lg p-4"
>
<p class="text-sm text-green-800 flex items-center">
<Check
:size="18"
class="mr-2"
/>
{{ successMessage }}
</p>
</div>
<!-- Submit Button -->
<button
type="submit"
:disabled="isLoading"
class="w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center"
>
<Loader2
v-if="isLoading"
:size="20"
class="mr-2 animate-spin"
/>
<span>{{ isLoading ? 'Anmeldung läuft...' : 'Anmelden' }}</span>
</button>
<!-- Forgot Password Link -->
<div class="text-center">
<NuxtLink
to="/passwort-vergessen"
class="text-sm text-primary-600 hover:text-primary-700 font-medium"
>
Passwort vergessen?
</NuxtLink>
</div>
</form>
</div>
<!-- Info Box -->
<div class="bg-primary-50 border border-primary-100 rounded-lg p-4">
<p class="text-sm text-primary-800 text-center">
<Lock
:size="16"
class="inline mr-1"
/>
Nur für Vereinsmitglieder. Kein Zugang? Kontaktieren Sie den Vorstand.
</p>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { AlertCircle, Check, Loader2, Lock } from 'lucide-vue-next'
const router = useRouter()
const authStore = useAuthStore()
const formData = ref({
email: '',
password: ''
})
const isLoading = ref(false)
const errorMessage = ref('')
const successMessage = ref('')
const handleLogin = async () => {
isLoading.value = true
errorMessage.value = ''
successMessage.value = ''
try {
const response = await authStore.login(formData.value.email, formData.value.password)
if (response.success) {
successMessage.value = 'Anmeldung erfolgreich! Sie werden weitergeleitet...'
// Redirect based on role
setTimeout(() => {
const roles = response.user.roles || (response.user.role ? [response.user.role] : [])
if (roles.includes('admin') || roles.includes('vorstand') || roles.includes('newsletter')) {
router.push('/cms')
} else {
router.push('/mitgliederbereich')
}
}, 1000)
}
} catch (error) {
errorMessage.value = error.data?.message || 'Anmeldung fehlgeschlagen. Bitte prüfen Sie Ihre Zugangsdaten.'
} finally {
isLoading.value = false
}
}
// Passkey-Login vorläufig deaktiviert
// const handlePasskeyLogin = async () => { ... }
definePageMeta({
layout: 'default'
})
useHead({
title: 'Login - Harheimer TC',
})
</script>