Golang实践之博客(七) 注册登录|Go主题月

664 阅读2分钟

前言

今天完成注册登录及使用中间件进行校验

目标

  • 用户注册和登录 使用gin中间件进行校验

用户注册和登录

定义实体

UserEntity

package Entity

type UserEntity struct {
	Id        string `gorm:"primaryKey"`
	Age       int
	Password  string
	LoginName string
	NickName  string
}

// 自定义表名称
func (UserEntity) TableName() string {
	return "User"
}

下载所需的包

uuid

go get github.com/satori/go.uuid

go-cache

go get github.com/patrickmn/go-cache

新增控制器

UserController

package UserController

import (
	"github.com/gin-gonic/gin"
	"golang-blog/Model/ViewModel/ApiState"
	"golang-blog/Service/UserService"
)

func GetUserInfo(c *gin.Context) {
	loginName := c.Query("loginName")
	password := c.Query("password")
	if loginName == "" || password == "" {
		ApiState.ArgErrApiResult(c, "loginName or password")
		return
	}
	userInfo := UserService.GetUserInfo(loginName, password)
	ApiState.ResponseSuccess(c, userInfo)
}


RegisterController

package RegisterController

import (
	"github.com/gin-gonic/gin"
	"golang-blog/Model/Entity"
	"golang-blog/Model/ViewModel/ApiState"
	"golang-blog/Service/RegisterService"
	"golang-blog/Service/UtilService"
	"strconv"
)

func RegisterUser(c *gin.Context) {
	loginName := c.PostForm("loginName")
	password := c.PostForm("password")
	if loginName == "" || password == "" {
		ApiState.ArgErrApiResult(c, "loginName or password")
		return
	}
	nickName := c.PostForm("nickName")
	ageStr := c.PostForm("age")
	age, _ := strconv.Atoi(ageStr)
	user := Entity.UserEntity{
		Id:        UtilService.UUId(),
		Age:       age,
		Password:  password,
		LoginName: loginName,
		NickName:  nickName,
	}
	RegisterService.RegisterUser(user)
	ApiState.ResponseSuccess(c, "注册成功")
}

LoginController

package LoginController

import (
	"github.com/gin-gonic/gin"
	"golang-blog/Model/ViewModel/ApiState"
	"golang-blog/Service/UserService"
)

func Index(c *gin.Context) {
	loginName := c.PostForm("loginName")
	password := c.PostForm("password")
	if loginName == "" || password == "" {
		ApiState.ArgErrApiResult(c, "loginName or password")
		return
	}
	userInfo := UserService.GetUserInfo(loginName, password)
	if userInfo.Id == "" {
		ApiState.ArgErrApiResult(c, "loginName or password")
		return
	}
	//cookieId := UtilService.UUId()
	//CacheService.SetCache(cookieId, userInfo)

	ApiState.ResponseSuccess(c, userInfo)
}

为新增控制器设置路由

package Routers

import (
	"github.com/gin-gonic/gin"
	"golang-blog/Controller/HomeControler"
	"golang-blog/Controller/LoginController"
	"golang-blog/Controller/RegisterController"
	"golang-blog/Controller/UserController"
	"golang-blog/Service/ConfigService"
)

func Init(router *gin.Engine) {
	home := router.Group("Home")
	register := router.Group("Register")
	user := router.Group("User")
	login := router.Group("Login")

	// 1.首位多余元素会被删除(../ or //);
	//2.然后路由会对新的路径进行不区分大小写的查找;
	//3.如果能正常找到对应的handler,路由就会重定向到正确的handler上并返回301或者307.(比如: 用户访问/FOO 和 /..//Foo可能会被重定向到/foo这个路由上)
	router.RedirectFixedPath = true

	{
		home.GET("/", HomeControler.Index)
		home.GET("/Hi", HomeControler.Hi)

		register.POST("/RegisterUser", RegisterController.RegisterUser)

		user.GET("/GetUserInfo", UserController.GetUserInfo)

		login.POST("/Index", LoginController.Index)
	}

	serverConfig := ConfigService.GetServerConfig()
	router.Run(serverConfig.HTTP_PORT) // 监听并在 127.0.0.1:8888 上启动服务
}

Service

UserService

package UserService

import (
	"golang-blog/Model/Entity"
	"golang-blog/Service/DbService"
)

// 根据登录名和密码查询用户信息
func GetUserInfo(loginName string, password string) Entity.UserEntity {
	var (
		user Entity.UserEntity
	)
	DbService.Db.Where(&Entity.UserEntity{LoginName: loginName, Password: password}).First(&user)
	return user
}

func ByLoginNameGetUser(loginName string) Entity.UserEntity {
	var (
		user Entity.UserEntity
	)
	DbService.Db.Where(&Entity.UserEntity{LoginName: loginName}).First(&user)
	return user
}

func SignIn(user Entity.UserEntity) string {
	user.Id = "123"
	DbService.Db.Create(&user)
	return user.Id
}

func Update(user Entity.UserEntity) {
	DbService.Db.Model(&Entity.UserEntity{}).Where(&Entity.UserEntity{Id: user.Id}).Updates(user)
}

func Delete(userId string) {
	DbService.Db.Delete(&Entity.UserEntity{}, userId)
}

RegisterService

package RegisterService

import (
	"golang-blog/Model/Entity"
	"golang-blog/Service/DbService"
)

// 注册用户
func RegisterUser(user Entity.UserEntity) string {
	user.Id = "123"
	DbService.Db.Create(&user)
	return user.Id
}

CacheService

package CacheService

import (
	"github.com/patrickmn/go-cache"
	"time"
)

var goCache = cache.New(30*time.Minute, 30*time.Minute)

func SetCache(key string, value interface{}) {
	goCache.Set(key, value, cache.DefaultExpiration)
}

func GetCache(key string) interface{} {
	value, bo := goCache.Get(key)
	if !bo {
		return nil
	}
	return value
}

最终效果

注册用户

image.png

查询用户信息

image.png

登录

image.png

源码仓库地址

github.com/panle666/Go…