Müşteri hesabı ve sepet
Kayıt, e-posta doğrulama, giriş, refresh, parola kurtarma ve çıkış için /storefront/auth uçlarını kullanın. Refresh çerezini HttpOnly tutun. Misafir sepetinde verilen sahiplik capability’sini koruyun; girişte kontrollü birleştirme kullanın. Müşteri verileri yalnız kendi hesabından okunur.
Oturum ve çerez
Bölüm başlığı “Oturum ve çerez”Aşağıdaki tarayıcı örnekleri starter’ın aynı-domain /api/sarraf proxy’sini kullanır. Kendi arayüzünüzde de bu sınırı koruyun: refresh çerezi HttpOnly/Secure kalır, API anahtarı browser’a girmez. Doğrudan farklı sitedeki API’ye yapılan refresh çağrıları tarayıcının üçüncü taraf çerez sınırlamalarına takılabilir.
const api = async (path, options = {}) => { const response = await fetch('/api/sarraf' + path, { credentials: 'include', ...options, headers: { 'Content-Type': 'application/json', ...options.headers } }) const body = await response.json() if (!response.ok || !body.status) throw new Error(body.code || 'request.failed') return body.result}
// Önce kayıt ve e-posta doğrulama akışını tamamlayın.const login = await api('/storefront/auth/login', { method: 'POST', body: JSON.stringify({ email, password, remember: true })})let accessToken = login.accessTokenconst customerHeaders = () => ({ Authorization: 'Bearer ' + accessToken })
// Refresh çerezi JavaScript ile okunmaz; tarayıcı proxy'ye iletir.const refreshed = await api('/storefront/auth/refresh', { method: 'POST', body: '{}'})accessToken = refreshed.accessTokenErişim tokenını loglamayın. 401 sonrası aynı oturum için tek refresh isteği yapın; başarısızsa giriş ekranına dönün. Hatalı şifreyi/checkout isteğini sonsuz döngüde tekrar göndermeyin. Form şemaları ve doğrulama koşulları API referansındadır.
Misafir sepeti
Bölüm başlığı “Misafir sepeti”const cart = await api('/storefront/cart', { method: 'POST', body: '{}', headers: { 'Idempotency-Key': crypto.randomUUID() }})const guestCartToken = cart.guestCartTokenconst addOperation = crypto.randomUUID()await api('/storefront/cart/items', { method: 'POST', headers: { 'X-Guest-Cart-Token': guestCartToken, 'Idempotency-Key': addOperation }, body: JSON.stringify({ productId, quantity: 1 })})const current = await api('/storefront/cart', { headers: { 'X-Guest-Cart-Token': guestCartToken }})guestCartToken sepetin sahiplik anahtarıdır: URL’ye, analitik kaydına veya başka mağazanın depolama anahtarına koymayın. Ağ hatasında aynı ürün ekleme isteği için addOperation değerini koruyun. Yeni kullanıcı eylemi yeni kimlik alır.
Girişten sonra POST /storefront/cart/merge, customer Bearer ve X-Guest-Cart-Token ile çağrılır. Gövdede mergeOperationId bulunur; retry sırasında bu değer ve Idempotency-Key aynı kalır. Başarılı birleştirmeden sonra misafir tokenını temizleyin. Favoriler /storefront/me/favorites, adresler /storefront/me/addresses altında yalnız oturum sahibine aittir.