session.secret wird ohne API-Key nicht zurückgegeben. Login nutzt daher session.userId und die Admin Users API statt account.get(). Co-authored-by: Cursor <cursoragent@cursor.com>
46 lines
1.2 KiB
JavaScript
46 lines
1.2 KiB
JavaScript
import { createUserClient, createAdminClient } from './appwriteAdmin.js'
|
|
|
|
/**
|
|
* Appwrite liefert session.secret nur bei Requests mit API-Key.
|
|
* Server-seitiger E-Mail-Login nutzt daher userId aus der Session + Admin Users API.
|
|
*/
|
|
export async function loginWithAppwrite(email, password) {
|
|
const { account } = createUserClient()
|
|
|
|
let session
|
|
try {
|
|
session = await account.createEmailPasswordSession(email, password)
|
|
} catch (err) {
|
|
const message = err?.message || 'Anmeldung fehlgeschlagen'
|
|
const error = new Error(message)
|
|
error.status = 401
|
|
throw error
|
|
}
|
|
|
|
const userId = session?.userId
|
|
if (!userId) {
|
|
const error = new Error('Appwrite-Session ohne Benutzer-ID')
|
|
error.status = 500
|
|
throw error
|
|
}
|
|
|
|
const { users } = createAdminClient()
|
|
let user
|
|
try {
|
|
user = await users.get(userId)
|
|
} catch (err) {
|
|
const message = err?.message || 'Benutzer konnte nicht geladen werden'
|
|
const error = new Error(message)
|
|
error.status = 500
|
|
throw error
|
|
}
|
|
|
|
try {
|
|
await users.deleteSession(userId, session.$id)
|
|
} catch {
|
|
// Portal nutzt eigene Cookie-Session; Appwrite-Session wird nicht persistiert
|
|
}
|
|
|
|
return user
|
|
}
|