Node.js'de SMS OTP Resend: Message ID ve Hata Yönetimi
SMS OTP resend işlemini yanlış yaparsanız kullanıcı kontrolsüz bir geçerli kod akışı alabilir. Bu yazıda açıklanan yaklaşım basit ama kritik: resend'i yeni bir gönderim değil, orijinal mesajın state geçişi olarak tasarla.
İlk gönderişte aldığın message ID'yi sakla. Resend çağrısında o ID'yi kullan, yanıt kodunu kaydet. İstemci tarafında pending, accepted ya da failed durumlarını göster. Bu şekilde bir kodu kaçıran kullanıcı sınırsız yeni kodlar almaz; sistem kontrollü kalır.
Her şey HTTP isteği değil, veri tutma stratejisinde. Mesajın tüm payload'ını, her retry'ı ve delivery detayını sonsuza kadar tutmak, login akışı için gereken operasyonel ve gizlilik yükünü aşar. Bunun yerine message ID'yi ve az sayıda state geçişini tut. Faturalama ve audit trail'i ayrı düşün. Destek sorusu geldiğinde ("Neden kod almadım?") message ID ve state history yeterlidir.
Backoff stratejisi de önemli. Hemen resend'e izin verme; 30-60 saniye beklet. Delivery error'ı aldıysan (timeout, invalid number, provider reject) bunu kaydet ve kullanıcıya net mesaj göster. Retry'ı sonsuz döngüye sokma.
Praktik taraf: message ID'yi database'de unique key yap, state ve timestamp'i ekle. Resend endpoint'inde önce eski message'ı bul, state'ini kontrol et, backoff'u doğrula, sonra provider'a çağrı yap. Response'u yeni state olarak kaydet. İstemci bunu polling veya webhook ile takip eder.
OTP resend güvenlik ve UX'in kesişim noktası. Çok katı olursan kullanıcı kodu almayıp kapıda kalır; çok gevşek olursan brute force riski artar. Message ID tabanlı state machine bu dengeyi sağlar.
0 yorum