> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Kunde, Anmeldung und Kundenkonto

> Die Abschnitte der shop.config rund um den Käufer: Anmeldung und Registrierung, Passwortregeln und Passwortampel, dauerhafter Login, gespeicherte Kundendaten, Prüfung der Eingaben und die WelcomeBack-Funktion.

Ob ein Käufer sich überhaupt anmelden muss, wie sicher sein Passwort sein soll, wie lange er angemeldet bleibt und was der Shop von ihm speichert: Diese Fragen beantworten die Abschnitte auf dieser Seite. Sie hängen enger zusammen, als ihre Trennung in der Konfiguration vermuten lässt.

Der Einstieg ist der Abschnitt `Login`, denn er entscheidet, ob es im Shop überhaupt eine Anmeldung gibt. Alles Weitere baut darauf auf.

Referenz: Shopkonfiguration shop.config, Übersicht aller Abschnitte

## Login

Legt fest, ob und wann sich ein Käufer anmelden muss, und steuert das Double-OptIn-Verfahren bei der Registrierung.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Login>
   LoginMode                              = no
   LoginAllSubshops-Allow                 = no
   SubshopLogin-Allow                     =
   LoginWithDoubleOptIn-Allow             = no
   NewCustomerDoubleOptInMode             = required
   NewCustomerResendDoubleOptInMail-Allow = no
   QuickLoginErrorDestinationPage         = notify
   MaxUserOrderQuantity-Allow             = no
</Login>
```

### Anmeldepflicht

| Parameter | Zweck | Werte |
| - | - | - |
| `LoginMode` | Wann eine Anmeldung verlangt wird. | `no`, `start`, `order`, `order-loginrequired`. Standard `no` |

| Wert | Bedeutung |
| - | - |
| `no` | Keine Anmeldung nötig, eine Gastbestellung ist möglich |
| `start` | Anmeldung schon beim Betreten des Shops, also ein geschlossener Shop |
| `order` | Anmeldung erst beim Aufgeben der Bestellung |
| `order-loginrequired` | Anmeldung beim Aufgeben der Bestellung, ohne Ausweichmöglichkeit |

Jeder andere als die vier genannten Werte führt stillschweigend zu `no`, also zu einem offenen Shop. Ein Tippfehler in diesem Parameter öffnet damit einen geschlossenen Shop, ohne dass irgendwo eine Warnung erscheint.

Bei `LoginMode = start` liest das Shopsystem den Cookie-Warenkorb erst nach der Anmeldung ein. Ein Käufer, der vor dem Anmelden etwas in den Warenkorb gelegt hatte, findet es also erst danach wieder.

### Subshops

| Parameter | Zweck | Werte |
| - | - | - |
| `LoginAllSubshops-Allow` | Erlaubt Bestandskunden die Anmeldung in jedem Subshop statt nur in dem, in dem sie sich registriert haben. | `yes`, `no`. Standard `no` |
| `SubshopLogin-Allow` | Subshops, in denen sich ein **neu** registrierter Kunde ebenfalls anmelden kann. Leer bedeutet keine zusätzlichen Subshops. | kommaseparierte Liste von Subshop-Kennungen |

> [!WARNING]
>
> `SubshopLogin-Allow` wirkt ausschließlich auf Neuanmeldungen. Bestehende Konten bekommen die zusätzlichen Subshops nicht nachträglich zugeteilt. Der Parametername legt das nicht nahe, das Verhalten ist aber so gewollt.

### Double-OptIn

| Parameter | Zweck | Werte |
| - | - | - |
| `LoginWithDoubleOptIn-Allow` | Schaltet das Double-OptIn-Verfahren für Neuanmeldung und Adressänderung ein. | `yes`, `no`. Standard `no` |
| `NewCustomerDoubleOptInMode` | Art des Verfahrens bei der Neuanmeldung. | `required`, `voluntary`, `off`. Standard `required` |
| `NewCustomerResendDoubleOptInMail-Allow` | Verschickt die Aktivierungsmail erneut, wenn sich jemand in ein noch nicht aktiviertes Konto einloggen will. | `yes`, `no`. Standard `no` |
| `ChangeEmailDoubleOptInSendTo` | Schickt die Bestätigungsmail bei einer Adressänderung an die **alte** statt an die neue Adresse. | `OldEmailAddress`. Standard leer |

| Wert von `NewCustomerDoubleOptInMode` | Bedeutung |
| - | - |
| `required` | Alle neuen Konten müssen die E-Mail-Adresse bestätigen |
| `voluntary` | Neue Konten bestätigen freiwillig, neue Mehrfachkonten jedoch zwingend |
| `off` | Neue Konten bestätigen gar nicht, neue Mehrfachkonten jedoch zwingend |

> [!WARNING]
>
> Eine E-Mail-Adresse, zu der ein nicht bestätigtes Konto existiert, lässt sich derzeit nicht erneut verwenden. Der Käufer kommt dann nur mit einer anderen Adresse weiter. Setzen Sie `NewCustomerResendDoubleOptInMail-Allow` auf `yes`, damit er die Aktivierungsmail wenigstens erneut anfordern kann.

Der Versand an die alte Adresse ist die sicherere Variante, denn nur der Inhaber des bestehenden Postfachs kann die Änderung dann bestätigen.

### Weitere Parameter

| Parameter | Zweck | Werte |
| - | - | - |
| `QuickLoginErrorDestinationPage` | Zielseite nach einer fehlgeschlagenen Anmeldung per QuickLogin. | `notify`, `login`. Standard `notify` |
| `MaxUserOrderQuantity-Allow` | Schaltet die kundenabhängige Bestellmengenbegrenzung ein. | `yes`, `no`. Standard `no` |
| `MaxUserOrderQuantitySubshop` | Subshop, dessen Mengenbegrenzung herangezogen wird. | Subshop-Kennung |
| `NewCustomerRegistrationCodeRequired-Allow` | Verlangt bei der Neuanmeldung einen Freischaltcode. | `yes`, `no`. Standard `no` |
| `NewCustomerBillingAddressRequired-Allow` | Verlangt bei der Neuanmeldung bereits die Rechnungsadresse. | `yes`, `no`, `test`. Standard `no` |
| `CustomerWithLoginCanOrderWithoutLogin-Allow` | Bei `no` wird eine Gastbestellung abgelehnt, wenn zu der E-Mail-Adresse bereits ein Konto existiert. | `yes`, `no`. Standard `yes` |
| `ExternalDownloadPW` | Passwort für den externen Download. | Zeichenkette |
| `RefererURL` | Filter auf die aufrufende Adresse. Passt sie nicht, wird der Aufruf abgewiesen. | Zeichenkette |
| `IP-Addresses` | Filter auf die IP-Adresse des Besuchers. | Liste von Adressen |
| `TFA-PendingTimeoutMinutes` | Wie lange eine angefangene Zwei-Faktor-Anmeldung gültig bleibt. | Ganzzahl 1 bis 60. Standard 10 |
| `TFA-TOTPIssuerName` | Name, unter dem der Shop in der Authenticator-App des Käufers erscheint. | Zeichenkette |

`RefererURL` und `IP-Addresses` greifen nur beim ersten Aufruf einer Sitzung und führen bei einem Treffer zu einer Hinweisseite, nicht zu einer stillen Ablehnung.

> [!WARNING]
>
> Der veraltete Parameter `DisableNewCustomerDoubleOptIn` wird nur dann noch ausgewertet, wenn `NewCustomerResendDoubleOptInMail-Allow` in der Konfiguration **gar nicht vorkommt**. Sobald dieser Parameter gesetzt ist, auch auf `no`, ignoriert das Shopsystem den alten Parameter. Verwenden Sie statt `DisableNewCustomerDoubleOptIn` den Wert `off` in `NewCustomerDoubleOptInMode`.

Wegweiser: [Anmeldung/Registrierung](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md), [Double-OptIn](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#double-optin), [Bestellmenge eines Produkts](https://dokumentation.websale.de/v8s/produkte/bestellmenge-eines-produkts.md), Subshop-übergreifende Logins, [Sicheres Anmeldeverfahren](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#sicheres-anmeldeverfahren)

## SecureLogin

Der umfangreichste Abschnitt dieser Seite. Er legt fest, wie sicher ein Passwort sein muss, wann ein Zugang nach Fehlversuchen gesperrt wird, wie die E-Mail-Adresse geprüft wird, und er hält die zugehörigen Fehlermeldungen.

Dazu kommt die Passwortampel. Sie bewertet ein Passwort schon während der Eingabe mit rot, gelb oder grün. Dafür gibt es jeden Grenzwert zweimal: einmal als Rot-Grenze, unterhalb derer das Passwort abgelehnt wird, und einmal als Gelb-Grenze, ab der die Ampel auf Grün springt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SecureLogin>
   Allow                              = yes
   PWMinLength-Value                  = 8
   PWMinCharacters-Value              = 2
   PWMinNumerics-Value                = 2
   PWMinSpecialCharacters-Value       = 0
   PWMinLowerCaseCharacters-Value     = 0
   PWMinUpperCaseCharacters-Value     = 0
   PWMaxSuccessiveNumerics-Value      = 0
   PWRepeatedSignsFault-Value         = 4
   Email-PWSimilaritySignsFault-Value = 4
   PWBlackListedStrings-List          = qwertz,passwort,shopname
   DenySimplePasswordLevel            = 0
   MaxLoginFaults-Value               = 3
   BlockingTime-Value                 = 10
   DetectionTime-Value                =
   EmailCheckMode                     = domain
</SecureLogin>
```

> [!WARNING]
>
> Der Parameter für die Mindestlänge heißt im Shopsystem `PWMinLenght-Value`, mit vertauschten Buchstaben. Das Shopsystem liest diese Schreibweise zuerst und fällt nur dann auf das korrekt geschriebene `PWMinLength-Value` zurück, wenn die erste Zeile fehlt. Beide Schreibweisen funktionieren also, aber **nicht gleichzeitig**: Steht die falsch geschriebene Zeile in der Konfiguration, dann gewinnt sie. Dasselbe gilt für `PWMinLenght-Yellow-Value`.

### Anforderungen an das Passwort

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | Schaltet das gesicherte Anmeldeverfahren ein. | `yes`, `no` |
| `PWMinLength-Value` | Mindestlänge des Passworts. | 1 bis 64. Standard 6. Empfohlen mindestens 6 |
| `PWMinCharacters-Value` | Mindestanzahl Buchstaben. | Ganzzahl. `0` deaktiviert. Standard 0, empfohlen 2 |
| `PWMinNumerics-Value` | Mindestanzahl Ziffern. | Ganzzahl. `0` deaktiviert. Standard 0, empfohlen 2 |
| `PWMinSpecialCharacters-Value` | Mindestanzahl Sonderzeichen. Als Sonderzeichen gilt alles außer Buchstaben und Ziffern. | Ganzzahl. `0` deaktiviert. Standard 0, empfohlen 2 |
| `PWMinLowerCaseCharacters-Value` | Mindestanzahl Kleinbuchstaben. | Ganzzahl. `0` deaktiviert. Standard 0 |
| `PWMinUpperCaseCharacters-Value` | Mindestanzahl Großbuchstaben. | Ganzzahl. `0` deaktiviert. Standard 0 |
| `PWMaxSuccessiveNumerics-Value` | Höchstzahl aufeinanderfolgender Ziffern. | Ganzzahl. `0` deaktiviert. Standard 0 |
| `PWRepeatedSignsFault-Value` | Ab wie vielen gleichen Zeichen in Folge das Passwort abgelehnt wird. Bei `4` fällt `abc1111` durch. | 2 bis 16. Jeder andere Wert deaktiviert die Prüfung. Empfohlen ab 4 |
| `Email-PWSimilaritySignsFault-Value` | Wie viele gleiche Zeichen in Folge E-Mail-Adresse und Passwort teilen dürfen. Bei `4` fallen `abc222@xyz.de` und `c222Yz` durch, weil `c222` in beiden steht. | 3 bis 16. Jeder andere Wert deaktiviert die Prüfung. Empfohlen ab 4 |
| `PWBlackListedStrings-List` | Zeichenfolgen, die im Passwort nicht vorkommen dürfen. | kommaseparierte Liste |
| `DenySimplePasswordLevel` | Erkennt systematische Passwörter, siehe unten. | 0 bis 32. `0` deaktiviert. Standard 0 |

> [!WARNING]
>
> Werte außerhalb des zulässigen Bereichs schalten die Prüfung ab, statt auf die Grenze gezogen zu werden. Bei `PWRepeatedSignsFault-Value = 1` oder `= 20` findet also **keine** Prüfung statt. Eine Ausnahme ist die Mindestlänge: Sie wird bei 0 auf 6 gesetzt und bei mehr als 64 auf 64 gekürzt.

### DenySimplePasswordLevel

Diese Prüfung findet systematische Passwörter wie `1234` oder `86420`. Das Level entspricht der Anzahl erlaubter Ein- und Zweizeichenabstände zwischen aufeinanderfolgenden Zeichen. Ein Einzeichenabstand liegt zwischen `ab`, `ba`, `89` oder `98`, ein Zweizeichenabstand zwischen `CE`, `ZX`, `24` oder `75`.

| Passwort | Abstände | Wird abgelehnt bei Level |
| - | - | - |
| `1234` | drei Einzeichenabstände: 12, 23, 34 | 1, 2 und 3 |
| `86420` | vier Zweizeichenabstände: 86, 64, 42, 20 | 1, 2, 3 und 4 |
| `mode43` | zwei Einzeichenabstände (de, 43) und ein Zweizeichenabstand (mo) | 1 und 2 |

> [!WARNING]
>
> Level `1` bietet die höchste Sicherheit, schränkt die Passwortwahl aber so stark ein, dass sie dem durchschnittlichen Käufer kaum noch zu erklären ist. Die Altdokumentation empfiehlt daher `0`, also die Prüfung abzuschalten. Wer sie einsetzen will, liegt mit 3 oder 4 bei hoher Sicherheit und noch erträglicher Bedienbarkeit.

### Sperren nach Fehlversuchen

Das Shopsystem sperrt getrennt nach E-Mail-Adresse und nach IP-Adresse.

| Parameter | Zweck | Werte |
| - | - | - |
| `MaxLoginFaults-Value` | Fehlversuche, bis der Zugang zu dieser E-Mail-Adresse gesperrt wird. | Ganzzahl. Standard 3 |
| `BlockingTime-Value` | Dauer dieser Sperre in Minuten. | 1 bis 60. Standard 10 |
| `DetectionTime-Value` | Zeitfenster in Minuten, innerhalb dessen die Fehlversuche zusammenkommen müssen. | Ganzzahl. Standard ist der Wert von `BlockingTime-Value` |
| `IPAddressBlocking-Allow` | Schaltet die Sperre nach IP-Adresse ein. | `yes`, `no`. Standard `no` |
| `IPAddressBlocking_MaxLoginFaults-Value` | Fehlversuche, bis die IP-Adresse gesperrt wird. | Ganzzahl. Standard 10 |
| `IPAddressBlocking_BlockingTime-Value` | Dauer dieser Sperre in Minuten. | Ganzzahl. Standard 10 |
| `IPAddressBlocking_DetectionTime-Value` | Zeitfenster für die Fehlversuche einer IP-Adresse in Minuten. | Ganzzahl. Standard 1 |

### Prüfung der E-Mail-Adresse

| Parameter | Zweck | Werte |
| - | - | - |
| `EmailCheckMode` | Wie streng die eingegebene E-Mail-Adresse geprüft wird. | `basic`, `syntax`, `domain`. Standard `domain` |
| `UseCaptchaForRequestSetPassword` | Verlangt ein Captcha beim Anfordern eines neuen Passworts. | `ReCaptchaV3`, `FriendlyCaptcha`, `CaptchaEU` |

**`basic`** prüft: nicht leer, kein Leerzeichen, genau ein @, mindestens ein Punkt, der Punkt steht hinter dem @, und hinter dem letzten Punkt stehen mindestens zwei Zeichen.

**`syntax`** enthält alle Prüfungen aus `basic` und zusätzlich für den Teil vor dem @: keine zwei Punkte hintereinander, kein Punkt am Anfang oder Ende, mindestens ein Zeichen, und nur alphanumerische Zeichen sowie `.`, `-`, `_` und `+`. Für den Teil hinter dem @ gilt dasselbe ohne `_` und `+`, und die Top-Level-Domain muss zwischen 2 und 10 Zeichen lang sein.

**`domain`** enthält alle Prüfungen aus `basic` samt der Prüfung des Teils vor dem @ aus `syntax` und verlangt zusätzlich, dass für die Domain ein MX- oder A-Eintrag existiert.

> [!WARNING]
>
> Nur `domain` prüft, ob es zu der Adresse überhaupt einen erreichbaren Mailserver gibt. Ohne diese Prüfung kann es passieren, dass weder die Aktivierungsmail noch die Bestellbestätigung zustellbar ist, der Käufer das aber erst merkt, wenn er sie vermisst.
>
> `EmailCheckMode` wird **nicht** berücksichtigt, wenn für das Feld E-Mail der Rechnungs- oder Lieferadresse ein `InputCheck` vom Typ `Email` definiert ist. Dann gilt ausschließlich dieser InputCheck. Wenn Sie hier einen anderen Wert als `domain` setzen wollen, prüfen Sie zuerst, ob ein solcher InputCheck existiert, und entfernen Sie ihn.

Das Anfordern eines neuen Passworts ist ein beliebter Weg, um Adressbestände auf gültige Konten abzuklopfen, deshalb ist ein Captchaschutz an dieser Stelle sinnvoll.

### Fehlermeldungen

| Parameter | Erscheint, wenn |
| - | - |
| `NewPWLength-Txt` | das Passwort kürzer ist als `PWMinLength-Value` |
| `Error1-Txt` | Passwort und E-Mail-Adresse zu ähnlich sind, aus Sicht des Passworts formuliert |
| `Error2-Txt` | zu viele gleiche Zeichen hintereinander stehen |
| `Error3-Txt` | der Zugang nach zu vielen Fehlversuchen gesperrt wurde |
| `Error4-Txt` | Passwort und E-Mail-Adresse zu ähnlich sind, aus Sicht der Adresse formuliert |
| `Error5-Txt` | `DenySimplePasswordLevel` greift |
| `Error6-Txt` | eine der Mindestanzahlen an Zeichenarten nicht erreicht ist |
| `Error7-Txt` | die IP-Adresse nach zu vielen Fehlversuchen gesperrt wurde |
| `Error8-Txt` | eine Zeichenfolge aus `PWBlackListedStrings-List` im Passwort steht |
| `Error9-Txt` | zu viele Ziffern aufeinander folgen |

Dort heißt es, die Meldung zur Mindestlänge werde im Abschnitt `LoginError-Txt` konfiguriert. Beides stimmt: `LoginError-Txt` hat einen eigenen Parameter `NewPWLength`, und zusätzlich gibt es hier `NewPWLength-Txt`, in dem anders als dort der konfigurierte Wert eingesetzt wird.

In diese Meldungen setzt das Shopsystem die konfigurierten Werte ein. Verfügbar sind:

| Tag | Verwendbar in | Wird ersetzt durch |
| - | - | - |
| `~PWMinLenght~` | `NewPWLength-Txt` | `PWMinLength-Value` |
| `~PWMinCharacters~` | `Error6-Txt` | `PWMinCharacters-Value` |
| `~PWMinNumerics~` | `Error6-Txt` | `PWMinNumerics-Value` |
| `~PWMinSpecialCharacters~` | `Error6-Txt` | `PWMinSpecialCharacters-Value` |
| `~PWMinLowerCaseCharacters~` | `Error6-Txt` | `PWMinLowerCaseCharacters-Value` |
| `~PWMinUpperCaseCharacters~` | `Error6-Txt` | `PWMinUpperCaseCharacters-Value` |
| `~PWRepeatedSignsFault~` | `Error2-Txt` | `PWRepeatedSignsFault-Value` |
| `~Email-PWSimilaritySignsFault~` | `Error1-Txt` und `Error4-Txt` | `Email-PWSimilaritySignsFault-Value` |
| `~PWMaxSuccessiveNumerics~` | `Error9-Txt` | `PWMaxSuccessiveNumerics-Value` |
| `~BlockingTime~` | `Error3-Txt` und `Error7-Txt` | der Sperrdauer in Minuten |

> [!WARNING]
>
> Das Shopsystem ersetzt eines dieser Tags **nur dann**, wenn der zugehörige Parameter größer `0` ist. Steht der Parameter auf `0` und das Tag trotzdem im Text, dann liest der Käufer das Tag im Klartext. Nehmen Sie das Tag also aus der Meldung heraus, sobald Sie die zugehörige Prüfung abschalten.

Zusätzlich stehen `~Email-PWSimilaritySignsFaultString~` und `~PWRepeatedSignsFaultString~` zur Verfügung. Sie werden nicht aus der Konfiguration gefüllt, sondern erst im Fehlerfall mit den tatsächlich beanstandeten Zeichen. Damit sagen Sie dem Käufer nicht nur, dass etwas nicht passt, sondern auch was.

### Passwortampel

Für die Ampel gibt es zu jedem Grenzwert eine zweite Fassung mit `-Yellow-` im Namen. Sie beschreibt die Grenze, ab der die Ampel von Gelb auf Grün springt. Die Grenzwerte ohne `-Yellow-` bleiben die Rot-Grenze, unterhalb derer das Passwort abgelehnt wird.

| Parameter | Empfohlener Wert | Zugehörige Meldung |
| - | - | - |
| `PWMinLength-Yellow-Value` | 8 | `NewPWLength-Yellow-Txt` |
| `PWMinCharacters-Yellow-Value` | 5 | `Error6-Yellow-Txt` |
| `PWMinNumerics-Yellow-Value` | 2 | `Error6-Yellow-Txt` |
| `PWMinSpecialCharacters-Yellow-Value` | 1 | `Error6-Yellow-Txt` |
| `PWMinLowerCaseCharacters-Yellow-Value` | 3 | `Error6-Yellow-Txt` |
| `PWMinUpperCaseCharacters-Yellow-Value` | 2 | `Error6-Yellow-Txt` |
| `PWMaxSuccessiveNumerics-Yellow-Value` | 4 | `Error9-Yellow-Txt` |
| `PWRepeatedSignsFault-Yellow-Value` | 3 | `Error2-Yellow-Txt` |
| `EMail-PWSimilaritySignsFault-Yellow-Value` | 4 | `Error1-Yellow-Txt` |
| `PWBlackListedStrings-Yellow-List` | eigene Liste | `Error8-Yellow-Txt` |

Die zugehörigen Tags heißen wie oben, ergänzt um `-Yellow`:

| Tag | Verwendbar in |
| - | - |
| `~PWMinLenght-Yellow~` | `NewPWLength-Yellow-Txt` |
| `~PWMinCharacters-Yellow~`, `~PWMinNumerics-Yellow~`, `~PWMinSpecialCharacters-Yellow~`, `~PWMinLowerCaseCharacters-Yellow~`, `~PWMinUpperCaseCharacters-Yellow~` | `Error6-Yellow-Txt` |
| `~PWMaxSuccessiveNumerics-Yellow~` | `Error9-Yellow-Txt` |
| `~PWRepeatedSignsFault-Yellow~` | `Error2-Yellow-Txt` |
| `~Email-PWSimilaritySignsFault-Yellow~` | `Error1-Yellow-Txt` |
| `~PWBlackListedString-Yellow~` | `Error8-Yellow-Txt` |

> [!WARNING]
>
> Das Tag für die Sperrliste heißt `~PWBlackListedString-Yellow~`, also in der Einzahl, während der Parameter `PWBlackListedStrings-Yellow-List` in der Mehrzahl steht. Wer das Tag in der Mehrzahl schreibt, bekommt es im Klartext angezeigt.
>
> Die Gelb-Grenze darf der Rot-Grenze nicht widersprechen. Eine Gelb-Grenze, die unter der Rot-Grenze liegt, ergibt eine Ampel, die grün zeigt, obwohl das Passwort abgelehnt wird. Das Shopsystem prüft das nicht.

Die Schreibweise `EMail-PWSimilaritySignsFault-Yellow-Value` mit großem M ist die, die das Shopsystem liest. Beim Parameter ohne `-Yellow-` ist es umgekehrt, dort heißt er `Email-PWSimilaritySignsFault-Value`. Da Parameternamen ohne Rücksicht auf Groß- und Kleinschreibung verglichen werden, funktionieren beide Schreibweisen.

Wegweiser: [Sicheres Anmeldeverfahren, Prüfung der E-Mail-Adresse. Referenz: Abschnitt InputCheck, Abschnitt LoginError-Txt](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#sicheres-anmeldeverfahren)

## SecuredPassword

Legt fest, was passiert, nachdem ein Käufer sein Passwort über den Link aus der E-Mail neu gesetzt hat.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<SecuredPassword>
   AutoLogin    = no
   CheckLoginID = no
</SecuredPassword>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `AutoLogin` | Meldet den Käufer nach dem Setzen des Passworts gleich an und zeigt das Kundenkonto. | `yes`, `no`. Standard `no` |
| `CheckLoginID` | Verlangt beim Setzen des Passworts zusätzlich die Benutzerkennung. | `yes`, `no`. Standard `no` |

`CheckLoginID = yes` erhöht die Sicherheit, denn der Link allein genügt dann nicht mehr. Wer Zugriff auf das Postfach hat, aber die Benutzerkennung nicht kennt, kommt damit nicht weiter. Der Preis ist eine zusätzliche Eingabe in einem Moment, in dem der Käufer ohnehin schon etwas vergessen hat.

Wegweiser: [Passwort vergessen](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#passwort-vergessen)

## AutoLogin

Der dauerhafte Login. Ein Käufer bleibt über das Ende der Sitzung hinaus angemeldet und muss beim nächsten Besuch kein Passwort eingeben.

Weil das ein Sicherheitsrisiko ist, lässt sich der dauerhafte Login an das Gerät, das Land und die IP-Adresse binden, und für besonders schützenswerte Seiten lässt sich die Passworteingabe trotzdem erzwingen.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<AutoLogin>
   Allow                        = no
   ExpiryTime                   = 10
   CriticalActions              =
   ReauthAlwaysBeforeCritAction = no
   ReauthAfterLastUse           = 0
   ReauthAfterLastPasswordInput = 0
   UserAgentDiffers-Allow       = yes
   CountryDiffers-Allow         = yes
   IPDiffers-Allow              = yes
</AutoLogin>
```

### Grundeinstellung

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | Schaltet die Funktion ein. | `yes`, `no`. Standard `no` |
| `ExpiryTime` | Wie viele Tage nach der letzten Verwendung der dauerhafte Login gültig bleibt. | Ganzzahl, mindestens 1. Standard 10 |

### Kritische Aktionen

`CriticalActions` ist eine kommaseparierte Liste von Seiten, bei denen das Shopsystem trotz dauerhaftem Login eine Passworteingabe verlangt.

| Wert | Seite |
| - | - |
| `UserAccount` | Kundenkonto |
| `DelivAddressManage` | Verwaltung der Lieferadressen |
| `OrderHistory` | Bestellhistorie |
| `PrimePackagesManage` | Verwaltung der Prime-Pakete |
| `ConnectedExternAccountsOverview` | Verwaltung externer Konten |
| `AutoLoginManage` | Verwaltung der gespeicherten Logins |
| `CombinedAddress` | Rechnungs- und Lieferadresse im Checkout |
| `PayDeliv` | Auswahl von Zahlungs- und Versandart |
| `PlaceOrder` | Bestellübersicht |

Wann genau die Passworteingabe greift, steuern drei Parameter:

| Parameter | Zweck | Werte |
| - | - | - |
| `ReauthAlwaysBeforeCritAction` | Verlangt die Passworteingabe immer vor der ersten kritischen Aktion. Gilt einmal je Sitzung. | `yes`, `no`. Standard `no` |
| `ReauthAfterLastUse` | Verlangt die Passworteingabe, wenn der dauerhafte Login so viele Tage nicht verwendet wurde. | Ganzzahl. `0` schaltet die Prüfung ab. Standard 0 |
| `ReauthAfterLastPasswordInput` | Verlangt die Passworteingabe, wenn die letzte Passworteingabe so viele Tage zurückliegt. | Ganzzahl. `0` schaltet die Prüfung ab. Standard 0 |

> [!WARNING]
>
> `CriticalActions` ist im Standard leer. Ohne Einträge kommt ein dauerhaft angemeldeter Käufer ohne weitere Prüfung bis zur Bestellübersicht. Nehmen Sie mindestens `UserAccount` und `PlaceOrder` auf, denn dort stehen Adresse und Zahlungsdaten.

### Bindung an Gerät, Land und IP-Adresse

| Parameter | Zweck | Werte |
| - | - | - |
| `UserAgentDiffers-Allow` | Bei `no` funktioniert der dauerhafte Login nur mit demselben Browser wie beim Einrichten. | `yes`, `no`. Standard `yes` |
| `CountryDiffers-Allow` | Bei `no` funktioniert er nur im selben Land. Das Land kommt aus der GeoIP-Ermittlung. | `yes`, `no`. Standard `yes` |
| `IPDiffers-Allow` | Bei `no` funktioniert er nur mit derselben IP-Adresse. Das letzte Oktett bleibt dabei unberücksichtigt. | `yes`, `no`. Standard `yes` |

> [!WARNING]
>
> Bei `CountryDiffers-Allow = no` scheitert der dauerhafte Login auch dann, wenn **gar kein** Land ermittelt werden konnte. Rechnen Sie also damit, dass ein Teil Ihrer Käufer sich trotz dauerhaftem Login wieder anmelden muss.

Das letzte Oktett der IP-Adresse bleibt bei `IPDiffers-Allow = no` absichtlich unberücksichtigt, weil viele Anschlüsse innerhalb desselben Netzes wechselnde Adressen bekommen. Ein Wechsel des Anschlusses oder vom Mobilfunk ins WLAN führt trotzdem zu einer neuen Anmeldung.

Wegweiser: Dauerhafter Login

## UserData

Legt fest, welche besonders schützenswerten Daten das Shopsystem im Kundenkonto speichert und wie die Lieferadresse für angemeldete Käufer vorausgewählt wird.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<UserData>
   SaveCreditCardData-Allow         = no
   SaveBankData-Allow               = no
   SaveMaxProducts-Allow            = no
   NewUserPWChangeRequired          = no
   SubAccounts-Allow                = no
   PreSelectDefaultDelivAddr-Allow  = no
   PreSelectLastUsedDelivAddr-Allow = yes
</UserData>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `SaveCreditCardData-Allow` | Speichert die beim Zahlungsdienstleister eingegebenen Kreditkarteninformationen im Kundenkonto. | `yes`, `no`. Standard `no` |
| `SaveBankData-Allow` | Speichert die eingegebene Bankverbindung. | `yes`, `no`. Standard `no` |
| `SaveMaxProducts-Allow` | Merkt sich die vom Käufer gewählte Anzahl Produkte je Seite. | `yes`, `no` |
| `NewUserPWChangeRequired` | Zwingt künftige Neukunden, die eine Warenwirtschaft anlegt, nach dem ersten Login zur Passwortänderung. | `yes`, `no`. Standard `no` |
| `SubAccounts-Allow` | Erlaubt mehrere Logins mit derselben E-Mail-Adresse, also Mehrfachkonten. | `yes`, `no`. Standard `no` |

Alle Kundendaten werden verschlüsselt gespeichert. `SaveCreditCardData-Allow` setzt voraus, dass der Zahlungsdienstleister eine Tokenisierung der Kartennummer unterstützt. Im Shop liegt dann nicht die Kartennummer, sondern ein Platzhalter dafür.

### Vorauswahl der Lieferadresse

| Parameter | Zweck | Werte |
| - | - | - |
| `PreSelectDefaultDelivAddr-Allow` | Wählt die vom Käufer als Standard markierte Lieferadresse vor. | `yes`, `no`. Standard `no` |
| `PreSelectLastUsedDelivAddr-Allow` | Wählt eine Lieferadresse nach einer der folgenden Regeln vor. | `yes`, `always`, `alwaysFirst`, `no`. Standard `yes` |

| Wert | Vorausgewählt wird |
| - | - |
| `yes` | die zuletzt geänderte oder bearbeitete Lieferadresse |
| `always` | die zuletzt verwendete Lieferadresse |
| `alwaysFirst` | die erste verfügbare Lieferadresse, sortiert nach Postleitzahl |
| `no` | keine Lieferadresse, es gilt die Rechnungsadresse |

Die beiden Parameter greifen nacheinander. Hat der Käufer eine Standardadresse festgelegt und steht `PreSelectDefaultDelivAddr-Allow` auf `yes`, dann gewinnt diese, und `PreSelectLastUsedDelivAddr-Allow` hat keine Wirkung mehr. Erst ohne Standardadresse kommt die zweite Regel zum Zug.

Wegweiser: Zahlungsart "Kreditkarte", Lastschrift und Bankverbindung abfragen, [Zwangsänderung des Passworts bei Neukunden](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#zwangsanderung-des-passworts-bei-neukunden), [Mehrfachkonten](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md#mehrfachkonten), [Standard-Lieferadresse festlegen](https://dokumentation.websale.de/v8s/kundenkonto/standard-lieferadresse-festlegen.md)

## VerifyCustomerData

Legt fest, wie streng das Shopsystem Kundeneingaben auf Plausibilität prüft, und hält die zugehörigen Fehlermeldungen.

Jede Prüfung kennt drei Stufen. Bei `soft` erfährt der Käufer vom Widerspruch, kann die Bestellung nach Bestätigung aber trotzdem abschicken. Bei `hard` muss er korrigieren. Bei `no` findet keine Prüfung statt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<VerifyCustomerData>
   FirstName     = soft
   Zip           = soft
   BankCode      = soft
   AccountNumber = soft
</VerifyCustomerData>
```

| Parameter | Prüft | Werte |
| - | - | - |
| `FirstName` | Anrede gegen Vornamen, anhand einer Datenbank mit rund 20.000 Vornamen | `no`, `soft`, `hard`. Standard `no`. Empfohlen `soft` |
| `Zip` | Postleitzahl gegen Ort, anhand einer Datenbank für Deutschland und Österreich | `no`, `soft`, `hard`. Standard `no`. Empfohlen `soft` |
| `BankCode` | Bankleitzahl gegen den Namen der Bank, anhand einer Datenbank für Deutschland und Österreich | `no`, `soft`, `hard`. Standard `no`. Empfohlen `soft` |
| `AccountNumber` | die Kontonummer auf formale Gültigkeit | `no`, `soft`, `hard`. Standard `no`. Empfohlen `soft` |

Der Parameter verhält sich wie die anderen drei und kennt dieselben drei Stufen.

> [!WARNING]
>
> `hard` bei `FirstName` und `Zip` führt dazu, dass Käufer mit einem ungewöhnlichen Vornamen oder einer frisch vergebenen Postleitzahl nicht bestellen können. Beide Prüfungen stützen sich auf Datenbestände, die nie vollständig sind. `soft` ist deshalb die sichere Wahl.

### Fehlermeldungen

Die Altdokumentation führt die folgenden Meldungen nur im Beispielblock auf, in der Parametertabelle fehlen sie teils oder stehen ohne Beschreibung da.

| Parameter | Erscheint, wenn |
| - | - |
| `FirstNameError-Txt` | Anrede und Vorname nicht zusammenpassen |
| `ZipError-Txt` | Postleitzahl und Ort nicht zusammenpassen |
| `BankCodeError-Txt` | Bankleitzahl und Bankname nicht zusammenpassen |
| `AccountNumberError-Txt` | die Kontonummer ungültig ist |
| `BankUserDescrEmptyError-Txt` | die Beschreibung der Bankverbindung fehlt, sofern sie Pflichtfeld ist |
| `BankOwnerEmptyError-Txt` | der Kontoinhaber fehlt |
| `BankAccountNumberEmptyError-Txt` | die Kontonummer fehlt |
| `BankNameEmptyError-Txt` | das Kreditinstitut fehlt |
| `BankCodeEmptyError-Txt` | die Bankleitzahl fehlt |
| `DateOfBirthInvalidError-Txt` | ein ungültiges Geburtsdatum eingegeben wurde, beispielsweise der 31. Februar |

### IBAN und BIC

| Parameter | Erscheint, wenn |
| - | - |
| `BankAccountIBANEmptyError-Txt` | die IBAN fehlt |
| `BankAccountIBANError-Txt` | die IBAN allgemein nicht korrekt ist |
| `BankAccountIBANLengthError-Txt` | die IBAN die falsche Länge hat |
| `BankAccountIBANChecksumError-Txt` | die Prüfsumme der IBAN nicht stimmt |
| `BankAccountIBANCountryError-Txt` | das Länderkennzeichen der IBAN nicht unterstützt wird |
| `BankAccountBICEmptyError-Txt` | die BIC fehlt |
| `BankAccountBICError-Txt` | die BIC nicht korrekt ist |

Gerade diese Meldungen lohnen eine eigene Formulierung, denn die Unterscheidung zwischen falscher Länge, falscher Prüfsumme und nicht unterstütztem Land sagt dem Käufer, wo er suchen muss.

Wegweiser: [Prüfung von Kundendaten festlegen](https://dokumentation.websale.de/v8s/adressdaten/pruefung-von-kundendaten-festlegen.md)

## WelcomeCookie

Die WelcomeBack-Funktion. Ein Käufer mit bestehendem Kundenkonto wird beim erneuten Besuch mit Namen begrüßt, ohne dass er angemeldet ist.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<WelcomeCookie>
   Allow      = yes
   CookieDays = 90
   <+Fields>
      Addressfield = FirstName,LastName
   </+Fields>
</WelcomeCookie>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | Schaltet die Funktion ein. | `yes`, `no`. Standard `no` |
| `CookieDays` | Nach wie vielen Tagen Cookie und Datenbankeintrag gelöscht werden. | Ganzzahl |
| `+Fields` mit `Addressfield` | Welche Adressfelder in der Begrüßung verwendbar sind. | kommaseparierte Liste technischer Feldnamen, beispielsweise `FirstName,LastName` |

Im Cookie steht nur ein Hashwert, nicht der Name. Die Felder holt das Shopsystem damit aus der Datenbank. Nur die hier aufgeführten Felder stehen später im Template zur Verfügung, und ausschließlich Felder der Rechnungsadresse sind zulässig.

> [!WARNING]
>
> Die Begrüßung mit Namen setzt voraus, dass der Besucher dem Cookie zugestimmt hat. Registrieren Sie den Cookie im Abschnitt `AgreementCookies`, sonst wird er nicht gesetzt.

Wegweiser: [WelcomeBack-Funktion](https://dokumentation.websale.de/v8s/kundenkonto/welcomeback-funktion.md). Referenz: WC- (WelcomeBack-Funktion)

## MKForumSSO

Hinterlegt das Fehler-Template für die Anbindung an Portale über Single Sign-on.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<MKForumSSO>
   TemplateError =
</MKForumSSO>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `TemplateError` | Template, das bei einem Fehler im SSO-Vorgang angezeigt wird. | Dateiname |

Das Shopsystem liest diesen Parameter nur, wenn die SSO-Anbindung für den Shop freigeschaltet ist. Ohne Freischaltung bleibt der Abschnitt wirkungslos.

Wegweiser: Schnittstelle zu Portalen

## Verbundene externe Konten

Für die Übersicht der mit einem externen Dienst verbundenen Konten gibt es keinen eigenen Konfigurationsabschnitt. Sie weisen lediglich im Abschnitt `Templates` ein Template zu:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Templates>
   ConnectedExternAccountsOverview = ws_connected_externaccounts.htm
</Templates>
```

Den Inhalt des Templates bauen Sie mit den `CEA-`Tags. Ein vollständiges Beispiel steht dort.

Referenz: [Abschnitt Templates, CEA- (Verbundene externe Konten). Wegweiser: Externes Login mit Facebook](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#templates)

## UserDefList-1 bis UserDefList-3

> [!WARNING]
>
> Diese Funktion ist veraltet und wird nicht mehr unterstützt. Für neue Shops verwenden Sie stattdessen die Auswahllisten der Adressdatenfelder.

Die drei Abschnitte definieren Einträge für Auswahllisten, die auf der Seite für Rechnungs- und Lieferadresse angezeigt werden können. Gedacht waren sie für Fragen an den Käufer, die er aus vorgegebenen Antworten auswählt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<UserDefList-1>
   +Entry = Erste Antwort
   +Entry = Zweite Antwort
</UserDefList-1>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `+Entry` | Ein Eintrag der Auswahlliste. Je Eintrag eine eigene Zeile. | beliebiger Text |

> [!WARNING]
>
> Die Auswahl des Käufers wird zwar in die Bestelldaten übergeben, aber **nicht** dauerhaft in den Kundendaten gespeichert. Bei der nächsten Bestellung steht die Liste wieder auf der Vorgabe.

Wegweiser: [Auswahllisten der Adressdaten](https://dokumentation.websale.de/v8s/adressdaten/auswahllisten-der-adressdaten.md)


## Related topics

- [Anmeldung und Registrierung](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md)
- [Schaltflächen für Kundenkonto und Anmeldung](https://dokumentation.websale.de/v8s/referenz/tags/bt/kundenkonto-und-anmeldung.md)
- [Kunde, Anmeldung und Konto](https://dokumentation.websale.de/v8s/referenz/tags/ws/kunde-anmeldung-und-konto.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.