设为首页 加入收藏

TOP

快速搭建一个go语言web后端服务脚手架(五)
2023-07-23 13:30:30 】 浏览:81
Tags:语言 web 后端服
en, []byte(username)) if err != nil { panic(fmt.Errorf("failed to store current subject in cache: %w", err)) } // Send cache key back to client cookie //c.SetCookie("current_subject", token, 30*60, "/resource", "", false, true) return token } func Register(register *request.Register) { var err error e := component.Enforcer err = e.GetAdapter().(*gormadapter.Adapter).Transaction(e, func(copyEnforcer casbin.IEnforcer) error { // Insert to table db := copyEnforcer.GetAdapter().(*gormadapter.Adapter).GetDb() res := db.Exec("insert into user (username,password) values(?,?)", register.Username, register.Password) //User has Username and Password //res := db.Table("user").Create(&User{ // Username: register.Username, // Password: register.Password, //}) if err != nil || res.RowsAffected < 1 { return fmt.Errorf("insert error: %w", err) } _, err = copyEnforcer.AddRoleForUser(register.Username, "role::user") if err != nil { return fmt.Errorf("add plocy error: %w", err) } return nil }) if err != nil { panic(err) } }

dao.user.go 对数据库的操作

package dao

import "go-web-demo/component"

type User struct {
	Id       int64 `gorm:"primaryKey"`
	Username string
	Password string
	Email    string
	Phone    string
}

func (u *User) TableName() string {
	return "user"
}

func GetByUsername(username string) *User {
	res := new(User)
	component.DB.Model(&User{}).Where("username = ?", username).First(res)
	return res
}

func Insert(username string, password string) (int64, error, int64) {
	user := &User{Username: username, Password: password}
	res := component.DB.Create(&user)

	return user.Id, res.Error, res.RowsAffected
}

最后一步,启动web服务,配置路由

package main

import (
	"fmt"
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"go-web-demo/component"
	"go-web-demo/config"
	"go-web-demo/handler"
	"go-web-demo/middleware"
	"log"
)

var (
	router *gin.Engine
)

func init() {
	//Initialize components from config yaml: mysql locaCache casbin
	component.CreateByConfig()

	// Initialize gin engine
	router = gin.Default()

	// Initialize gin middleware
	corsConfig := cors.DefaultConfig()
	corsConfig.AllowAllOrigins = true
	corsConfig.AllowCredentials = true
	router.Use(cors.New(corsConfig))
	router.Use(middleware.Recover)

	// Initialize gin router
	user := router.Group("/user")
	{
		user.POST("/login", handler.Login)
		user.POST("/logout", handler.Logout)
		user.POST("/register", handler.Register)
	}

	resource := router.Group("/api")
	{
		resource.Use(middleware.DefaultAuthorize("user::resource", "read-write"))
		resource.GET("/resource", handler.ReadResource)
		resource.POST("/resource", handler.WriteResource)
	}

}

func main() {
	// Start
	port := config.Reader.Server.Port
	err := router.Run(":" + port)
	if err != nil {
		panic(fmt.Sprintf("failed to start gin engine: %v", err))
	}
	log.Pr
首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇开源在线客服系统-客服系统历史消.. 下一篇sync.Pool:提高Go语言程序性能的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目