Login mit E-Mail-Code (Appwrite-2FA)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
21325c4037
commit
b8e4de97c7
5 files changed
+253
-7
No files matched your search
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Mitarbeiter-2FA per E-Mail-Code (Appwrite 1.8.1). Das SDK 13 kennt die MFA-Endpunkte nicht, deshalb
|
||||
* gehen die Aufrufe ueber client.call - mit derselben Sitzung (Cookie-Fallback) wie das SDK.
|
||||
* Bewusst ohne Import von appwrite.js, damit Node dieses Modul in den Tests laden kann.
|
||||
*/
|
||||
const HEADERS = { 'content-type': 'application/json', 'X-Appwrite-Locale': 'de' }
|
||||
|
||||
export function createMfaApi(client) {
|
||||
const url = () => new URL(`${client.config.endpoint}/account/mfa/challenges`)
|
||||
return {
|
||||
async createEmailChallenge() {
|
||||
const challenge = await client.call('post', url(), { ...HEADERS }, { factor: 'email' })
|
||||
return challenge.$id
|
||||
},
|
||||
async completeChallenge(challengeId, otp) {
|
||||
await client.call('put', url(), { ...HEADERS }, { challengeId, otp })
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export function isMoreFactorsError(err) {
|
||||
return err?.type === 'user_more_factors_required'
|
||||
}
|
||||
|
||||
export function mfaErrorMessage(err) {
|
||||
if (err?.type === 'user_invalid_token') return 'Code falsch oder abgelaufen.'
|
||||
if (err?.code === 429 || err?.type === 'general_rate_limit_exceeded') return 'Zu viele Versuche. Bitte warte einige Minuten.'
|
||||
if (err?.type === 'user_email_not_verified') return '2FA ist für dein Konto noch nicht eingerichtet – bitte Kenso Bescheid geben.'
|
||||
return err?.message || 'Anmeldung fehlgeschlagen'
|
||||
}
|
||||
|
||||
/** kenso@webklar.com -> k…@webklar.com */
|
||||
export function maskEmail(email) {
|
||||
const [local, domain] = String(email || '').split('@')
|
||||
if (!local || !domain) return ''
|
||||
return `${local[0]}…@${domain}`
|
||||
}
|
||||
Reference in new issue
Block a user