欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang利用redis和gin實(shí)現(xiàn)保存登錄狀態(tài)校驗(yàn)登錄功能

 更新時(shí)間:2024年01月20日 14:15:50   作者:牧童牽黃牛  
這篇文章主要介紹了golang利用redis和gin實(shí)現(xiàn)保存登錄狀態(tài)校驗(yàn)登錄功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

保存用戶登錄狀態(tài),一般常用的方式有兩種

一、生成token,然后token保存到數(shù)據(jù)庫用戶表里面,每次登錄的時(shí)候,自動(dòng)更新,容納后每次用的時(shí)候,去取出來校驗(yàn),這種方式,數(shù)據(jù)庫壓力大,而且不是很靈活

二、每次登錄生成token,然后token保存到Redis緩存中,每次都去校驗(yàn),不僅快速,而且,數(shù)據(jù)庫壓力也小

1.啟動(dòng)時(shí)候,加載Redis項(xiàng)

2、Redis(附帶參數(shù)文件)

前期準(zhǔn)備工作好之后

1、路由,利用路由文件,添加中間件,將所有需要驗(yàn)證token的接口放一起

        比如前端要訪問的接口是“api/index/index”

package router
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"hexiao/service"
)
func Router() *gin.Engine {
	r := gin.Default()
	//修改密碼
	r.POST("api/user/changepwd", service.ChangePwd)
	//登錄
	r.POST("api/user/login", service.Login)
	//設(shè)置需要登錄驗(yàn)證的一些函數(shù)
	IndexGroup := r.Group("/api/index")
	{
		//調(diào)用中間件
		IndexGroup.Use(service.AuthMiddleWare())
		IndexGroup.POST("/index", service.IndexInfo)
	}
	return r
}

中間件控制

 
//token存入redis部分代碼
token := "xxxxxxxxxxxxxx"
ctx := context.Background()
userID := "online_" + fmt.Sprintf("%d", adminuser2.Id)
time2 := time.Duration(viper.GetInt("timeout.RedisOnlineTime")) * time.Hour
err := utils.Red.Set(ctx, userID, token, time2)
if err != nil {
	fmt.Println("set  err=", err)
}
//取token驗(yàn)證中間件
func AuthMiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		ctx := context.Background()
		userid1 := c.PostForm("user_id")
		token := c.PostForm("token")
		if token == "" {
			c.JSON(200, gin.H{
				"code": 300,
				"data": "",
				"msg":  "請(qǐng)攜帶token!",
			})
			c.Abort()
			return
		}
		userID := "online_" + userid1
		r, err := utils.Red.Get(ctx, userID).Result()
		if err != nil {
			fmt.Println("err>>>>>>", err)
		}
		if r != token {
			c.JSON(200, gin.H{
				"code": 300,
				"data": "",
				"msg":  "登錄失效,請(qǐng)重新登錄!",
			})
			c.Abort()
			return
		}
	}
}

具體的token組裝方式,自己確定,我這邊采用的是固定字符串+user_id的方式,

token可以由body中傳,也可以由header中傳

效果

無token:

token錯(cuò)誤:

token正確

到此這篇關(guān)于golang利用redis和gin實(shí)現(xiàn)保存登錄狀態(tài),校驗(yàn)登錄的文章就介紹到這了,更多相關(guān)golang校驗(yàn)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang實(shí)現(xiàn)按行讀取文件的方法小結(jié)

    Golang實(shí)現(xiàn)按行讀取文件的方法小結(jié)

    按行讀取文件相較于一次性載入,有著很多優(yōu)勢,如內(nèi)存效率高、處理速度快、實(shí)時(shí)性高等,本文主要介紹了Golang按行讀取文件的相關(guān)方法,希望對(duì)大家有所幫助
    2024-02-02
  • go語言接口之接口值舉例詳解

    go語言接口之接口值舉例詳解

    接口是一種抽象類型,是對(duì)其他類型行為的概括與抽象,從語法角度來看,接口是一組方法定義的集合,下面這篇文章主要給大家介紹了關(guān)于go語言接口之接口值的相關(guān)資料,文章通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 深入解析Go template模板使用詳解

    深入解析Go template模板使用詳解

    這篇文章主要介紹了深入解析Go template模板使用詳解,需要的朋友可以參考下
    2022-04-04
  • Go語言二進(jìn)制文件的讀寫操作

    Go語言二進(jìn)制文件的讀寫操作

    本文主要介紹了Go語言二進(jìn)制文件的讀寫操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang常用手冊(cè)之切片(Slice)原理

    golang常用手冊(cè)之切片(Slice)原理

    本篇文章主要介紹了golang常用手冊(cè)之切片(Slice)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 淺談go語言中別名類型的使用

    淺談go語言中別名類型的使用

    類型別名是 Go 1.9 版本添加的新功能,主要用于解決代碼升級(jí)、遷移中存在的類型兼容性問題,本文主要介紹了go語言中別名類型的使用,感興趣的可以了解一下
    2024-01-01
  • 使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解

    使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解

    本文主要介紹了Go語言實(shí)現(xiàn)Sm2加解密的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Go語言開發(fā)k8s之Deployment操作解析

    Go語言開發(fā)k8s之Deployment操作解析

    這篇文章主要為大家介紹了Go語言開發(fā)k8s之Deployment操作解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • golang grpc配置使用實(shí)戰(zhàn)

    golang grpc配置使用實(shí)戰(zhàn)

    本文主要介紹了golang grpc配置使用實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 十個(gè)示例帶你深入了解Go語言中的接口

    十個(gè)示例帶你深入了解Go語言中的接口

    這篇文章主要是通過十個(gè)簡單的示例帶大家深入了解一下Go語言中接口的使用,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的可以了解一下
    2023-02-02

最新評(píng)論