
Jan 10, 2020
Go dilini öğrenme yolculuğumda, ilk paketimi yazmaya karar verdim ve ortaya GAH (Gin Auth Handlers) çıktı. Bu araç, kullanıcı authentication işlemlerini kolaylaştırmayı hedefleyen bir Go paketi. Bu yazıda, GAH projesinin amacını, nasıl kurulacağını ve kullanım detaylarını paylaşacağım.
Meteor.js ile o kadar basit bir şekilde authentication eklemeye alıştım ki, Go tarafında gin-gonic ile çalışırken bunu tekrar tekrar projelerimde kullanmak istedim. Bu nedenle bir Middleware yazmaya karar verdim ve bunu bir paket haline getirdim.
GAH, Go'nun popüler web çerçevesi olan gin-gonic ile uyumlu bir authentication çözümüdür. Projenin amacı, aşağıdaki ihtiyaçları karşılamaktır:
Tüm authentication işlemlerinde, login endpoint'inden alınan token'i X-User-Id
header alanına ekleyerek işlemleri gerçekleştirebilirsiniz.
GAH paketini kullanabilmek için öncelikle Go'yu kurmanız ve Go çalışma alanınızı ayarlamanız gerekiyor.
Aşağıdaki komut ile GAH paketini projenize ekleyebilirsiniz:
go get -u github.com/yasaricli/gah
MongoDB bağlantı ayarlarını yapmak için aşağıdaki ortam değişkenlerini tanımlayın:
export MONGO_URL=mongodb://127.0.0.1:27017 # MongoDB sunucu adresi.
export MONGO_DATABASE=project_db # MongoDB veritabanı adı.
export MONGO_COLLECTION=users # Kullanıcıların kaydedileceği koleksiyon adı.
GAH kullanarak API'yi başlatmak ve kullanmak oldukça basittir.
API'yi başlatmak için:
go run main.go
Kullanıcı kaydı için email
ve password
bilgilerini POST olarak göndermeniz yeterlidir.
http POST http://localhost:4000/api/register email=yasaricli@gmail.com password=12345
Status Code: 200
{
"data": {
"_id": "5e18b00ecf1474424f04e68a",
"email": "yasaricli@gmail.com"
},
"status": "success"
}
Kullanıcı giriş yapmak için yine email
ve password
bilgilerini POST olarak göndermelisiniz.
http POST http://localhost:4000/api/login email=yasaricli@gmail.com password=12345
Status Code: 200
{
"data": {
"authToken": "402b2f399114746e583ec3094d613c91c553e238e8f6bdbf55a80865a72d39e7",
"userId": "5e18b00ecf1474424f04e68a"
},
"status": "success"
}
authToken
değerini kullanarak yetkilendirme gerektiren endpoint'lere erişim sağlayabilirsiniz. Token'i X-Auth-Token
header'ında göndererek güvenli bir şekilde API çağrısı yapabilirsiniz. Örnek bir kullanım:
http GET http://localhost:4000/api/books X-Auth-Token:402b2f399114746e583ec3094d613c91c553e238e8f6bdbf55a80865a72d39e7
Status Code: 200
{
"userId": "5e18b00ecf1474424f04e68a",
"data": [
{
"book": "Go Programming",
"author": "John Doe"
}
]
}
GAH, gin-gonic çerçevesiyle kolayca entegre olacak şekilde tasarlanmıştır. Aşağıda adım adım kullanım detaylarını bulabilirsiniz.
Öncelikle gin-gonic paketini kurun:
go get -u github.com/gin-gonic/gin
Daha sonra, LoginHandler ve RegisterHandler fonksiyonlarını API'ye ekleyin:
package main
import (
"github.com/gin-gonic/gin"
"github.com/yasaricli/gah"
)
func main() {
router := gin.Default()
api := router.Group("/api")
{
api.POST("/login", gah.LoginHandler)
api.POST("/register", gah.RegisterHandler)
}
router.Run(":4000")
}
Yetkilendirme gerektiren bir endpoint eklemek için AuthRequiredMiddleware'i kullanabilirsiniz. Örnek bir handler:
func main() {
router := gin.Default()
api := router.Group("/api")
{
api.GET("/books", gah.AuthRequiredMiddleware, func(c *gin.Context) {
userID := c.MustGet("userID")
c.JSON(200, gin.H{
"userId": userID,
})
})
}
router.Run(":4000")
}
Bu middleware, authentication işlemini kontrol eder ve başarılı olduğunda kullanıcı bilgilerini context
üzerinden erişilebilir hale getirir.
Gin varsayılan olarak "debug" modunda çalışır. Üretim ortamında "release" moduna geçiş yapmak için şu adımları takip edin:
export GIN_MODE=release
Veya kod içinde şu şekilde ayarlayabilirsiniz:
gin.SetMode(gin.ReleaseMode)
GAH, Go dilindeki ilk paketim olarak sadece kendi öğrenim sürecime değil, aynı zamanda geliştiricilerin authentication işlemlerini daha kolay bir şekilde entegre etmelerine de katkı sağlamayı amaçlıyor. Eğer gin-gonic ile bir proje üzerinde çalışıyorsanız ve kullanıcı yönetimini hızlıca entegre etmek istiyorsanız, GAH'ı denemenizi öneririm.
GAH projesini GitHub'da bulabilirsiniz: https://github.com/yasaricli/gah
Herkese iyi çalışmalar!