Node.js ile SMS OTP Göndermek: Template Yönetimi ve Güvenlik

Pazar yeri uygulamalarında telefon doğrulaması sıkça gerekir. Kullanıcı bir form doldurdu, destek ekibine yönlendirilmeden önce numarasını doğrulaması lazım. SMS kodu göndermenin basit görünmesine rağmen, template sahibi olmak ve OTP yaşam döngüsünü kontrol etmek gerçekten önemli.

Node.js'de OTP oluşturmak için `crypto` modülü yeterli. Rastgele, güvenli bir kod üretebilirsin:

1const crypto = require('crypto');
2
3function generateOTP(length = 6) {
4const digits = '0123456789';
5let otp = '';
6const randomBytes = crypto.randomBytes(length);
7
8for (let i = 0; i < length; i++) {
9otp += digits[randomBytes[i] % 10];
10}
11
12return otp;
13}
14
15const code = generateOTP(6);
16console.log('OTP:', code);

Kodu oluşturduktan sonra SMS hizmeti API'sine gönder. Burada template yönetimi devreye giriyor. İki seçeneğin var:

Uygulama Sahibi Template: Geliştirici ekibin SMS metnini kontrol eder, uygulamada gözden geçirir. Değişiklik yapılırsa yeni sürüm yayımlanır. Hızlı ve basit, fakat mesajı güncellemek için kod sürümü gerekir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Hizmet Sahibi Template: SMS sağlayıcı mesaj şablonunu yönetir. Kopya bağımsız olarak güncellenir, uygulamaya müdahale etmez. Pazarlama veya destek ekibinin özerk çalışması gerekiyorsa ideal.

Önemi şu: template sahibi olmak, OTP yaşam döngüsünü kontrol etmekle aynı şey değil. OTP'yi kimin oluşturduğu, doğruladığı ve tükettiği ayrı bir meseledir. Sunucu tarafında kalmalı.

1const express = require('express');
2const app = express();
3const otpStore = new Map();
4
5app.post('/send-otp', (req, res) => {
6const { phone } = req.body;
7const otp = generateOTP(6);
8const expiresAt = Date.now() + 10 * 60 * 1000; // 10 dakika
9
10otpStore.set(phone, { otp, expiresAt });
11
12// SMS hizmetine gönder
13sendSMS(phone, `Doğrulama kodunuz: ${otp}`);
14
15res.json({ success: true });
16});
17
18app.post('/verify-otp', (req, res) => {
19const { phone, code } = req.body;
20const stored = otpStore.get(phone);
21
22if (!stored || stored.otp!== code || stored.expiresAt < Date.now()) {
23return res.status(400).json({ error: 'Geçersiz veya süresi dolmuş kod' });
24}
25
26otpStore.delete(phone);
27res.json({ success: true, token: generateSessionToken() });
28});

Kod tüketilince silinmesi önemli. Kullanıcı aynı kodu tekrar kullanamamalı. Destek kuyruğuna yönlendirme kararı da sunucuda kalmalı; istemci tarafında değil.

Template seçimi, geliştirici ve pazarlama ekibinin iş akışına bağlı. Mesaj içeriği sık değişiyorsa ve bağımsız yayımlanması gerekiyorsa hizmet tabanlı şablon seç. Geliştirici tarafı zaten gözden geçiriyor ve kontrol ediyorsa, uygulama tabanlı yeterli.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz