Auth Token

GitBook allows you to organize your book into chapters, each chapter is stored in a separate file like this one.

Apa itu auth

bagaimana best practise auth dalam api

Apa itu auth Token

pada bab 5 kita akan mempelajari tentang auth token menggunakan jwt-token

  • copy folder 04-mysql-db dan paste dengan nama 05-token

  • pastikan semua import yang mengarah ke 04-mysql-db diubah ke 05-token

  • pada func main() kita tambhakan routing untuk handling token

router.HandleFunc("/api/get-token",  controllers.GetTokenHandler).Methods("POST")

buat method baru di userRepository :

func GetPwdByEmail(inputEmail string)(string, error){
    rows, err := db.Query("SELECT password FROM users WHERE email=?", inputEmail)
    libraries.CheckError(err)

    defer rows.Close()

    var databasePassword string

    for rows.Next() {
        err := rows.Scan(&databasePassword)
        libraries.CheckError(err)
    }

    err = rows.Err()
    libraries.CheckError(err)

    return databasePassword, err
}

buat middleware untuk handle token. buat file libraries/token.go yang berisi

package libraries

import (
    "github.com/dgrijalva/jwt-go"
    "time"
)

type MyCustomClaims struct {
    Username string `json:"username"`
    jwt.StandardClaims
}

var mySigningKey = []byte("secret-rahasia")

func ValidateToken(myToken string) (bool, string) {
    token, err := jwt.ParseWithClaims(myToken, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {
        return []byte(mySigningKey), nil
    })

    if err != nil {
        return false, ""
    }

    claims := token.Claims.(*MyCustomClaims)
    return token.Valid, claims.Username
}

func ClaimToken(username string) (string, error){
    claims := MyCustomClaims{
        username,
        jwt.StandardClaims{
            ExpiresAt: time.Now().Add(time.Hour * 5).Unix(),
        },
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    // Sign the token with our secret
    return token.SignedString(mySigningKey)
}

fungsi ClaimToken digunakan untuk mendapatkan token, fungsi ValidateToken digunakan untuk memvalidasi token

  • buat controller baru, controllers/authController.go untuk menghandle token

  • pada setiap handle function di controller, sisipkan kode validasi token di bagian atas

if (len(req.Header["Token"]) == 0) {
    json.NewEncoder(w).Encode("Please suplay valid token")
    return
}

isTokenValid, _ := libraries.ValidateToken(req.Header["Token"][0])

if !isTokenValid {
    json.NewEncoder(w).Encode("token tidak valid")
    return
}

results matching ""

    No results matching ""