YGNCodeAI နှင့်နည်းပညာအမေးအဖြေ

မှတ်ချက်။ AI ပြောတိုင်းအမှန်မဟုတ်ပါဘူး၊ တခါတလေသူကအမှားတွေပါပြောတက်ပါတယ်။ ကိုယ်ပိုင်စဥ်းစားဆင်ခြင်ဆုံးဖြတ်ပါ။

Nwe Ni Soe 17 Sep 2024, 5:16 pm

Token ကို mongo dbမှာ storeလုပ်ပီး ပြည့်စုံတဲ့ codeကို golang သုံးပီးထုတ်ပေးပါ

ဟုတ်ကဲ့။ Golang ကိုသုံးပြီး token ကို MongoDB မှာ store လုပ်တဲ့ ပြည့်စုံတဲ့ code ကို ထုတ်ပေးပါမယ်။ ဒီ code က token ကို create လုပ်ခြင်း၊ store လုပ်ခြင်းနဲ့ verify လုပ်ခြင်းတို့ကို ပြသထားပါတယ်။

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"github.com/dgrijalva/jwt-go"
)

type TokenDetails struct {
	Token     string    `bson:"token"`
	UserID    string    `bson:"user_id"`
	ExpiresAt time.Time `bson:"expires_at"`
}

var (
	mongoClient *mongo.Client
	collection  *mongo.Collection
	jwtKey      = []byte("your_secret_key")
)

func init() {
	// MongoDB connection
	clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
	client, err := mongo.Connect(context.TODO(), clientOptions)
	if err != nil {
		log.Fatal(err)
	}

	// Check the connection
	err = client.Ping(context.TODO(), nil)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Connected to MongoDB!")
	mongoClient = client
	collection = client.Database("your_database").Collection("tokens")
}

func createToken(userId string) (string, error) {
	expirationTime := time.Now().Add(24 * time.Hour)
	claims := &jwt.StandardClaims{
		ExpiresAt: expirationTime.Unix(),
		IssuedAt:  time.Now().Unix(),
		Subject:   userId,
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	tokenString, err := token.SignedString(jwtKey)
	if err != nil {
		return "", err
	}

	return tokenString, nil
}

func storeToken(token string, userId string, expiresAt time.Time) error {
	tokenDetails := TokenDetails{
		Token:     token,
		UserID:    userId,
		ExpiresAt: expiresAt,
	}

	_, err := collection.InsertOne(context.TODO(), tokenDetails)
	return err
}

func verifyToken(tokenString string) (*jwt.StandardClaims, error) {
	claims := &jwt.StandardClaims{}

	token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
		return jwtKey, nil
	})

	if err != nil {
		return nil, err
	}

	if !token.Valid {
		return nil, fmt.Errorf("invalid token")
	}

	return claims, nil
}

func main() {
	// Example usage
	userId := "user123"
	token, err := createToken(userId)
	if err != nil {
		log.Fatal(err)
	}

	expirationTime := time.Now().Add(24 * time.Hour)
	err = storeToken(token, userId, expirationTime)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Token created and stored: %s\n", token)

	// Verify token
	claims, err := verifyToken(token)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Token verified for user: %s\n", claims.Subject)

	// Close MongoDB connection
	err = mongoClient.Disconnect(context.TODO())
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Connection to MongoDB closed.")
}

ဒီ code မှာ အဓိကအပိုင်းတွေကတော့:

  1. MongoDB နဲ့ ချိတ်ဆက်ခြင်း
  2. JWT token ကို create လုပ်ခြင်း
  3. Token ကို MongoDB မှာ store လုပ်ခြင်း
  4. Token ကို verify လုပ်ခြင်း

ဒီ code ကို run ဖို့အတွက် လိုအပ်တဲ့ dependencies တွေကို install လုပ်ဖို့လိုပါမယ်:

go get go.mongodb.org/mongo-driver/mongo
go get github.com/dgrijalva/jwt-go

ပြီးတော့ MongoDB server ကိုလည်း run ထားဖို့လိုပါတယ်။ code ထဲမှာ MongoDB connection string နဲ့ database name ကို သင့်လျော်သလို ပြောင်းပေးရပါမယ်။

ပြန်လည်မျှဝေပါ... Facebook Twitter LinkedIn WhatsApp Telegram