ဟုတ်ကဲ့။ 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 မှာ အဓိကအပိုင်းတွေကတော့:
- MongoDB နဲ့ ချိတ်ဆက်ခြင်း
- JWT token ကို create လုပ်ခြင်း
- Token ကို MongoDB မှာ store လုပ်ခြင်း
- 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 ကို သင့်လျော်သလို ပြောင်းပေးရပါမယ်။