İçeriğe geç

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.

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.accessToken
const 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.accessToken

Eriş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.

const cart = await api('/storefront/cart', {
method: 'POST', body: '{}',
headers: { 'Idempotency-Key': crypto.randomUUID() }
})
const guestCartToken = cart.guestCartToken
const 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.