Background
10 Ocak 2020 Cuma
gogin-gonic

Jan 10, 2020

Hafta Sonu Projem: GAH - Gin Auth Handlers

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.


GAH Nedir?

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:

  • Login ve Register Endpointleri: Giriş ve kayıt işlemleri için hazır handler'lar.
  • Auth Middleware: Token tabanlı authentication işlemlerini kolayca entegre etme.

Tüm authentication işlemlerinde, login endpoint'inden alınan token'i X-User-Id header alanına ekleyerek işlemleri gerçekleştirebilirsiniz.


Kurulum

GAH paketini kullanabilmek için öncelikle Go'yu kurmanız ve Go çalışma alanınızı ayarlamanız gerekiyor.

Paket Kurulumu

Aşağıdaki komut ile GAH paketini projenize ekleyebilirsiniz:

go get -u github.com/yasaricli/gah

Gerekli Ortam Değişkenleri

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ı.

API Kullanımı

GAH kullanarak API'yi başlatmak ve kullanmak oldukça basittir.

Başlatma

API'yi başlatmak için:

go run main.go

Register Endpoint

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

Response:

Status Code: 200
{
  "data": {
    "_id": "5e18b00ecf1474424f04e68a",
    "email": "yasaricli@gmail.com"
  },
  "status": "success"
}

Login Endpoint

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

Response:

Status Code: 200
{
  "data": {
    "authToken": "402b2f399114746e583ec3094d613c91c553e238e8f6bdbf55a80865a72d39e7",
    "userId": "5e18b00ecf1474424f04e68a"
  },
  "status": "success"
}

authToken Kullanımı

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

Response:

Status Code: 200
{
  "userId": "5e18b00ecf1474424f04e68a",
  "data": [
    {
      "book": "Go Programming",
      "author": "John Doe"
    }
  ]
}

Kullanım ve Dokümantasyon

GAH, gin-gonic çerçevesiyle kolayca entegre olacak şekilde tasarlanmıştır. Aşağıda adım adım kullanım detaylarını bulabilirsiniz.

Gin-Gonic ile Kullanım

Ö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")
}

AuthRequiredMiddleware

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.


Üretim Modu

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)

Sonuç

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!