Twilio Kullanarak Go ve Remix ile Onay Kodu Kimlik Doğrulama Uygulaması Oluşturma
Bu makalede, kullanıcılara SMS yoluyla gönderilen otomatik olarak oluşturulmuş kodları kullanarak iki faktörlü kimlik doğrulama (2FA) uygulaması nasıl oluşturulacağını açıklayacağız. Bu uygulama, güvenli bir şekilde şifresiz giriş yapmanın bir yolu olarak otomatik kod doğrulaması kullanacak ve bu da kullanıcıların hesaba erişim sağlamasının daha güvenli bir yolunu sağlayacaktır.
Uygulamanın geliştirme süreci, Twilio’nun API’sini kullanarak Go ve Remix’i içerecektir. Twilio, kullanıcılara SMS ve e-posta yoluyla doğrulama kodları göndermek için güçlü ve güvenilir bir çözüm sunar. Remix, React tabanlı performans odaklı bir web çerçevesidir ve sunucu tarafı oluşturma işlevleri sağlar. Go, yüksek performanslı ve güvenilir uygulamalar oluşturmaya uygun bir genel amaçlı programlama dilidir.
## Projeyi Kurma
İlk adım, projeyi kurmak ve gerekli bağımlılıkları yüklemek olacaktır.
**1. Yeni bir Go projesi oluşturun:**
“`bash
mkdir go-twilio-auth
cd go-twilio-auth
“`
**2. Go modunu başlatın:**
“`bash
go mod init go-twilio-auth
“`
**3. Remix projesini oluşturun:**
“`bash
npx create-remix@latest
“`
**4. Bağımlılıkları yükleyin:**
“`bash
npm install
“`
## Twilio Hesabınızı Kurun
Twilio ile başlamak için bir Twilio hesabına ihtiyacınız olacak. Bir hesap oluşturun ve daha sonra aşağıdaki adımları izleyerek bir Twilio projesi ayarlayın.
1. **Twilio web sitesine gidin:** https://www.twilio.com/
2. **Hesabınıza giriş yapın veya ücretsiz bir hesap oluşturun.**
3. **Konsolun sol tarafındaki menüden “Telefon Numaraları”na gidin.**
4. **Yeni bir telefon numarası satın alın veya mevcut bir numarayı ekleyin.**
5. **Numaranın SID’sini ve Auth Token’ınızı kaydedin, bunlara ihtiyacınız olacak.**
## Go Sunucusunu Yapılandırma
Go tarafında, Twilio API’sini kullanarak SMS mesajları göndermek için gerekli olan kodu yazacağız.
**1. “twilio” paketini yükleyin:**
“`go
go get github.com/twilio/twilio-go
“`
**2. Sunucu dosyanızı oluşturun (örneğin: server.go):**
“`go
package main
import (
“fmt”
“log”
“net/http”
“os”
“github.com/gin-gonic/gin”
“github.com/twilio/twilio-go”
)
func main() {
// Twilio kimlik bilgilerini alın
accountSID := os.Getenv(“TWILIO_ACCOUNT_SID”)
authToken := os.Getenv(“TWILIO_AUTH_TOKEN”)
// Twilio istemcisini başlatın
twilioClient := twilio.NewRestClient(accountSID, authToken)
// Gin sunucusunu başlatın
router := gin.Default()
// Onay kodu gönderme rotası
router.POST(“/send-code”, func(c *gin.Context) {
phoneNumber := c.PostForm(“phone_number”)
// Onay kodu oluşturma (örneğin rastgele sayı)
code := generateVerificationCode()
// SMS mesajı gönder
_, err := twilioClient.Messages.Create(&twilio.MessageOptions{
To: phoneNumber,
From: os.Getenv(“TWILIO_PHONE_NUMBER”),
Body: fmt.Sprintf(“Onay kodunuz: %s”, code),
})
if err != nil {
log.Printf(“SMS gönderme hatası: %v”, err)
c.JSON(http.StatusInternalServerError, gin.H{“error”: “SMS gönderme hatası”})
return
}
// Kodu veritabanına veya bir oturum değişkenine kaydedin
// …
c.JSON(http.StatusOK, gin.H{“message”: “Onay kodu başarıyla gönderildi!”})
})
// Sunucuyu başlatın
router.Run(“:8080”)
}
// Rastgele bir onay kodu oluşturma (örnek)
func generateVerificationCode() string {
// …
}
“`
**3. Kimlik bilgilerini ayarlayın:**
`.env` dosyasını oluşturun ve Twilio hesabınızın kimlik bilgilerini ekleyin:
“`
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_PHONE_NUMBER=+11234567890
“`
**4. Çevrenizdeki değişkenleri yükleyin:**
“`go
// server.go’nun başında ekleyin
import (
“os”
“github.com/joho/godotenv”
)
func main() {
// .env dosyasını yükleyin
if err := godotenv.Load(); err != nil {
log.Fatal(err)
}
// …
}
“`
## Remix Ön Uç Uygulamasını Yapılandırma
Remix’te, kullanıcı arayüzünü ve Twilio sunucusuyla etkileşimi oluşturacağız.
**1. “send-code” rotası için bir bileşen oluşturun (örneğin: app/routes/send-code.jsx):**
“`jsx
import { useFetcher } from “remix”;
import { useState } from “react”;
export default function SendCode() {
const fetcher = useFetcher();
const [phoneNumber, setPhoneNumber] = useState(“”);
const handleSubmit = async (event) => {
event.preventDefault();
const data = { phone_number: phoneNumber };
const res = await fetcher.load(“/send-code”, {
method: “POST”,
body: JSON.stringify(data),
});
if (res.status === 200) {
// Onay kodu gönderildi, kullanıcıyı doğrulama ekranına yönlendirin
// …
} else {
// Hata mesajını görüntüleyin
// …
}
};
return (
);
}
“`
**2. “verify-code” rotası için bir bileşen oluşturun (örneğin: app/routes/verify-code.jsx):**
“`jsx
import { useFetcher } from “remix”;
import { useState } from “react”;
export default function VerifyCode() {
const fetcher = useFetcher();
const [code, setCode] = useState(“”);
const handleSubmit = async (event) => {
event.preventDefault();
const data = { code };
const res = await fetcher.load(“/verify-code”, {
method: “POST”,
body: JSON.stringify(data),
});
if (res.status === 200) {
// Onay kodu doğrulandı, kullanıcıyı ana sayfaya yönlendirin
// …
} else {
// Hata mesajını görüntüleyin
// …
}
};
return (
);
}
“`
**3. “app/routes/index.js” dosyasına yönlendirmeleri ekleyin:**
“`jsx
import { Link, Outlet, useFetcher } from “remix”;
export default function Root() {
const fetcher = useFetcher();
return (
Onay kodu gönder
);
}
“`
## Go Sunucusu’ndan Remix’e Veri Gönderme
Şimdi, Go sunucusu ve Remix uygulaması arasında iletişimi kuracağız.
**1. Go sunucusu’nda doğrulama kodunu doğrulama rotası oluşturun:**
“`go
// server.go’da ekleyin
router.POST(“/verify-code”, func(c *gin.Context) {
code := c.PostForm(“code”)
// Doğrulama kodunu veritabanında veya oturum değişkeninde kontrol edin
// …
if // Doğrulama kodu geçerli:
c.JSON(http.StatusOK, gin.H{“message”: “Onay kodu doğrulandı!”})
else:
c.JSON(http.StatusUnauthorized, gin.H{“error”: “Geçersiz onay kodu”})
}
})
“`
**2. Remix’te fetcher’ı kullanarak veriyi Go sunucusundan alın:**
“`jsx
// app/routes/verify-code.jsx’te ekleyin
const res = await fetcher.load(“/verify-code”, {
method: “POST”,
body: JSON.stringify(data),
});
if (res.status === 200) {
// Onay kodu doğrulandı, kullanıcıyı ana sayfaya yönlendirin
// …
} else {
// Hata mesajını görüntüleyin
// …
}
“`
## Doğrulama Kodu Depolama
Onay kodunu depolamak için çeşitli yöntemler kullanabilirsiniz. İşte bazı seçenekler:
* **Veritabanı:** Kodu bir veritabanında depolayın. Bu, doğrulama işlemi için güvenli ve kalıcı bir depolama sağlar.
* **Oturum değişkenleri:** Kodu kullanıcı oturumunda saklayın. Bu, daha basit bir yaklaşım olsa da, yalnızca kullanıcının tarayıcı aktifken kodu saklayabilir.
* **Redis gibi bir önbellek:** Kodu kısa süreli olarak bir önbellek sisteminde depolayın. Bu, veritabanı üzerindeki yükü azaltır ve doğrulama işlemini hızlandırır.
## Ek Güvenlik Önlemleri
Uygulama güvenliğinizi artırmak için aşağıdaki ek önlemleri göz önünde bulundurabilirsiniz:
* **Geçici Kodlar:** Kodların geçerlilik süresini ayarlayın.
* **Çoklu Deneme Sınırlamaları:** Kullanıcıların çok sayıda yanlış kod denemelerini önlemek için sınırlamalar uygulayın.
* **Güvenlik Önlemleri:** Önemli bilgileri şifreleyerek ve XSS saldırılarına karşı korunarak uygulama güvenliğini sağlayın.
* **İki Faktörlü Kimlik Doğrulama:** Uygulamanıza iki faktörlü kimlik doğrulama (2FA) ekleyin.
## Sonuç
Bu makalede, Twilio kullanarak Go ve Remix ile otomatik kod doğrulama uygulaması oluşturmayı öğrendik. Bu uygulama, güvenli bir şekilde giriş yapmanın bir yolu olarak otomatik kod doğrulama kullanarak kullanıcıların hesaba erişim sağlamasının daha güvenli bir yolunu sağlar. Twilio API’si SMS mesajları göndermek için güçlü ve güvenilir bir çözüm sunar, Remix ise kullanıcı arayüzü geliştirmek için kullanışlı bir web çerçevesidir, Go ise uygulamanın arka ucunu geliştirmek için ideal bir programlama dilidir.
**Not:** Bu, temel bir otomatik kod doğrulama uygulaması örneğidir. Gerçek bir uygulamanızda, ek güvenlik önlemleri, hata işleme ve veritabanı entegrasyonu gibi daha gelişmiş özellikler eklemeniz gerekebilir. Ayrıca, güvenlik açıklarından kaçınmak için uygulamanızı iyice test etmeniz önemlidir.
## #Etiketler
* #Go
* #Remix
* #Twilio
* #OnayKodu
* #KimlikDogrulama
* #Güvenlik
* #İkiFaktörlüKimlikDogrulama
* #2FA
* #SMS
* #WebUygulama
* #FatihSoysal
* #fatihsoysal.com
**Ek Kaynaklar:**
* [Twilio Dokümantasyonu](https://www.twilio.com/docs)
* [Remix Dokümantasyonu](https://remix.run/docs)
* [Go Dokümantasyonu](https://go.dev/doc/)
