Middleware: Authentication
Middleware: autentifikatsiya
Eng ko'p ishlatiladigan middleware turlaridan biri — kirish huquqini tekshirish. So'rovda kerakli sarlavha (masalan token) bo'lmasa, asl handler'ga umuman yetib bormaydi.
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func requireAuth(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Authorization") == "" {
w.WriteHeader(http.StatusUnauthorized)
fmt.Fprint(w, "ruxsat yo'q")
return
}
next(w, r)
}
}
func main() {
secret := requireAuth(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "maxfiy ma'lumot")
})
req := httptest.NewRequest("GET", "/secret", nil)
rec := httptest.NewRecorder()
secret(rec, req)
fmt.Println(rec.Code, rec.Body.String())
}Muhim naqsh: middleware token yo'qligini ko'rsa, next(w, r) chaqirmaydi va darhol return qiladi — shu tarza asl handler ishga tushmaydi, mijoz esa 401 Unauthorized javobini oladi. Bu — "darvozabon" (gatekeeper) naqshi: middleware ruxsat bermaguncha, hech kim ichkariga kirolmaydi.
>_ Exercise
Faqat to'g'ri API kalitiga ruxsat beradigan middleware yozing.
- •requireAPIKey middleware'ini yozing: "X-API-Key" sarlavhasi "sekret123" ga teng bo'lmasa, 403 va "kirish taqiqlangan" qaytaring
- •to'g'ri bo'lsa next'ni chaqiring
- •ikkita holatni (to'g'ri va noto'g'ri kalit) sinab ko'ring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Autentifikatsiya middleware'i — noto'g'ri so'rovlarni asl handler'ga yetkazmasdan, eng boshida to'xtatadigan "darvozabon".
NEXT UP
HTTP Testing with httptest
$ go run main.go
Kodingizni ishga tushiring