Golang JWT-Front-End-Überprüfungsmethode:
Der Client fügt den Token-Parameter im Anforderungsobjekt-Header hinzu und sendet ihn an den Server und den Server Nimmt es heraus. Token werden verglichen.
Die erste Token-Generierung erfolgt nach der Anmeldung, um zu überprüfen, ob das Konto existiert und korrekt ist. Der Benutzer erhält ein Token (verschlüsselte Zeichenfolge) und das Token wird in den Header der Antwort eingefügt. Nachdem sich der Kunde erfolgreich angemeldet hat, wird das Token aus der Antwort entfernt und in nachfolgenden Vorgangsanforderungen zum Header hinzugefügt. Nach Ablauf der Token-Gültigkeitsdauer kann ein neues Token nur durch erneute Anmeldung abgerufen werden.
Implementierung:
Der server_token wird generiert und in den Header der Antwort eingefügt
Das Frontend akzeptiert und erhält: Response.headers['x-auth-token']
import "github.com/fwhezfwhez/jwt" func Login(c *gin.Context){ ...(验证身份正确) //获取token管理对象 token := jwt.GetToken() //添加令牌关键信息 token.AddPayLoad("userName", user.UserName).AddPayLoad("role", "admin").AddHeader("typ", "JWT").AddHeader("alg", "HS256") //添加令牌期限 exp:=time.Now().Add(1*time.Hour) token.AddPayLoad("exp", strconv.FormatInt(exp.Unix(), 10)) //获取令牌,并添加进reponse的header里 jwts, _, erre := token.JwtGenerator(consts.Secret) if erre != nil { fmt.Println("token生成出错") return } fmt.Println("生成的jwt是:", jwts) c.Writer.Header().Add("x-auth-token", jwts) ... }
Client_Send login request
var Token string func main(){ ... var content = fmt.Sprintf("userName=admin&password=123456") t1 := time.Now() resp, err := http.Post(host+"v1/POST/user/login", "application/x-www-form-urlencoded", strings.NewReader(content)) Token =resp.Header.Get("x-auth-token") t2 := time.Now() fmt.Println(t2.Sub(t1)) if err != nil { panic(err) } helpRead(resp) ... }
Client_Request andere Funktionen, um die Liste zu erhalten
... t1 := time.Now() //resp, err := http.Get(host + "v1/GET/mediums/list") client := &http.Client{} req, err := http.NewRequest("GET", "http://localhost:8087/v1/GET/mediums/list",nil) req.Header.Add("x-auth-token", Token) resp, err := client.Do(req) t2 := time.Now() fmt.Println(t2.Sub(t1)) if err != nil { panic(err) } helpRead(resp) ...
Server_Token-Überprüfung
func main(){ ... router := gin.Default() //Login不需要令牌验证,所以写中间件前面 router.POST(consts.LoginURL, userControl.Login) router.Use(Validate()) //后续的监听都需要通过Validate()的验证 router.GET(consts.GetMediumsURL, mediumControl.GetMediums) router..... ... } func Validate()gin.HandleFunc{ return func(c *gin.Context) { if JWTToken := c.Request.Header.Get("x-auth-token");JWTToken!=""{ token :=jwt.GetToken() legal,err:=token.IsLegal(JWTToken,consts.Secret) if err!=nil{ fmt.Println(err) c.Abort() c.JSON(200,consts.ResponseTokenValidateError) return } if !legal{ c.Abort() c.JSON(200,consts.ResponseTokenValidateWrong) return } c.Next() }else{ c.JSON(200, consts.ResponseTokenNotFound) c.Abort() return } } }
Für weitere Golang-Kenntnisse achten Sie bitte auf PHP-Chinesisch Website-Kolumne Golang-Tutorial.
Das obige ist der detaillierte Inhalt vonSo überprüfen Sie das Golang-JWT-Frontend. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!