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

go如何使用gin結(jié)合jwt做登錄功能簡(jiǎn)單示例

 更新時(shí)間:2024年01月17日 08:28:57   作者:wjdsg  
jwt全稱(chēng)Json web token,是一種認(rèn)證和信息交流的工具,這篇文章主要給大家介紹了關(guān)于go如何使用gin結(jié)合jwt做登錄功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1、安裝gin

go get -u github.com/gin-gonic/gin

2、安裝session

go get github.com/gin-contrib/sessions

3、安裝JWT鑒權(quán)

go get "github.com/golang-jwt/jwt/v4"

4、創(chuàng)建一個(gè)jwt的工具文件

package utils

import (
	"errors"
	"github.com/golang-jwt/jwt/v4"
	"time"
)

type MyClaims struct {
	Phone                string `json:"phone"`
	jwt.RegisteredClaims        // 注意!這是jwt-go的v4版本新增的,原先是jwt.StandardClaims
}

var MySecret = []byte("wjdsg") // 定義secret,后面會(huì)用到

func Secret() jwt.Keyfunc {
	return func(token *jwt.Token) (interface{}, error) {
		return []byte(MySecret), nil // 這是我的secret
	}
}

// 這里傳入的是手機(jī)號(hào),因?yàn)槲翼?xiàng)目登陸用的是手機(jī)號(hào)和密碼
func MakeToken(phone string) (tokenString string, err error) {
	claim := MyClaims{
		Phone: phone,
		RegisteredClaims: jwt.RegisteredClaims{
			ExpiresAt: jwt.NewNumericDate(time.Now().Add(3 * time.Hour * time.Duration(1))), // 過(guò)期時(shí)間3小時(shí)
			IssuedAt:  jwt.NewNumericDate(time.Now()),                                       // 簽發(fā)時(shí)間
			NotBefore: jwt.NewNumericDate(time.Now()),                                       // 生效時(shí)間
		}}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) // 使用HS256算法
	tokenString, err = token.SignedString(MySecret)
	return tokenString, err
}

// 解析jwt
func ParseToken(tokenss string) (*MyClaims, error) {
	token, err := jwt.ParseWithClaims(tokenss, &MyClaims{}, Secret())
	if err != nil {
		if ve, ok := err.(*jwt.ValidationError); ok {
			if ve.Errors&jwt.ValidationErrorMalformed != 0 {
				return nil, errors.New("非法令牌")
			} else if ve.Errors&jwt.ValidationErrorExpired != 0 {
				return nil, errors.New("令牌國(guó)企")
			} else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 {
				return nil, errors.New("令牌未激活")
			} else {
				return nil, errors.New("令牌未知錯(cuò)誤")
			}
		}
	}
	if claims, ok := token.Claims.(*MyClaims); ok && token.Valid {
		return claims, nil
	}
	return nil, errors.New("couldn't handle this token")
}

5、開(kāi)始使用

package main

import (
	"awesomeProject/utils"
	"fmt"
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	// 初始化gin服務(wù)
	rootRouter := gin.Default()

	// 創(chuàng)建cookie存儲(chǔ)
	store := cookie.NewStore([]byte("secret"))
	//路由上加入session中間件
	rootRouter.Use(sessions.Sessions("mysession", store))

	//配置路由組
	group := rootRouter.Group("/wjdsg")
	{
		group.GET("/set", func(context *gin.Context) {
			session := sessions.Default(context)

			token, err := utils.MakeToken("15088888888")
			if err != nil {
				fmt.Println("jwt生產(chǎn)錯(cuò)誤")
			}
			//將jwt保持到session中
			session.Set("adminId", token)
			session.Save()
			context.JSON(http.StatusOK, token)
		})
		group.GET("/get", func(context *gin.Context) {

			//獲取jwt
			session := sessions.Default(context)
			token := session.Get("adminId").(string)
			//解析jwt
			parseToken, err := utils.ParseToken(token)
			if err != nil {
				fmt.Println("jwt解析錯(cuò)誤:", err)
			}

			m := make(map[string]interface{})

			m["jwt"] = token
			m["解析"] = parseToken

			context.JSON(http.StatusOK, m)
		})
	}

	//啟動(dòng)http服務(wù),可以修改端口
	address := fmt.Sprintf(":%d", 8080)
	rootRouter.Run(address)
}

6、結(jié)果

總結(jié) 

到此這篇關(guān)于go如何使用gin結(jié)合jwt做登錄功能的文章就介紹到這了,更多相關(guān)go gin結(jié)合jwt做登錄功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Go語(yǔ)言中數(shù)組,切片和映射的使用

    詳解Go語(yǔ)言中數(shù)組,切片和映射的使用

    Arrays (數(shù)組), Slices (切片) 和 Maps (映射) 是常見(jiàn)的一類(lèi)數(shù)據(jù)結(jié)構(gòu)。這篇文章將為大家詳細(xì)介紹一下Go語(yǔ)言中數(shù)組,切片和映射的使用,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • GoLang橋接模式的實(shí)現(xiàn)示例

    GoLang橋接模式的實(shí)現(xiàn)示例

    橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,通過(guò)橋接模式可以將抽象部分和它的實(shí)現(xiàn)部分分離,本文主要介紹了GoLang橋接模式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Go設(shè)計(jì)模式之單例模式講解和代碼示例

    Go設(shè)計(jì)模式之單例模式講解和代碼示例

    單例是一種創(chuàng)建型設(shè)計(jì)模式,讓你能夠保證一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)該實(shí)例的全局節(jié)點(diǎn),本文就通過(guò)代碼示例給大家講講Go單例模式,需要的朋友可以參考下
    2023-07-07
  • go語(yǔ)言實(shí)現(xiàn)markdown解析庫(kù)的方法示例

    go語(yǔ)言實(shí)現(xiàn)markdown解析庫(kù)的方法示例

    這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)markdown解析庫(kù)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 淺談Go連接池的設(shè)計(jì)與實(shí)現(xiàn)

    淺談Go連接池的設(shè)計(jì)與實(shí)現(xiàn)

    本文主要介紹了淺談Go連接池的設(shè)計(jì)與實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解如何使用Go語(yǔ)言進(jìn)行文件監(jiān)控和通知

    詳解如何使用Go語(yǔ)言進(jìn)行文件監(jiān)控和通知

    在Go語(yǔ)言中,文件監(jiān)控通常涉及到文件系統(tǒng)事件的監(jiān)聽(tīng),文件或目錄的狀態(tài)發(fā)生變化(如創(chuàng)建、刪除、修改等)時(shí),你的程序需要得到通知,所以本文給大家介紹了如何使用Go語(yǔ)言進(jìn)行文件監(jiān)控和通知,需要的朋友可以參考下
    2024-06-06
  • golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    這篇文章主要介紹了golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Gin golang web開(kāi)發(fā)模型綁定實(shí)現(xiàn)過(guò)程解析

    Gin golang web開(kāi)發(fā)模型綁定實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Gin golang web開(kāi)發(fā)模型綁定實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 詳解Golang中errors包如何返回自定義error類(lèi)型

    詳解Golang中errors包如何返回自定義error類(lèi)型

    這篇文章主要為大家詳細(xì)介紹了Golang中errors包如何返回自定義error類(lèi)型,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • golang 執(zhí)行命令行的實(shí)現(xiàn)

    golang 執(zhí)行命令行的實(shí)現(xiàn)

    本文主要介紹了golang 執(zhí)行命令行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論