首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jwt-go库-键是无效类型的

使用jwt-go库-键是无效类型的
EN

Stack Overflow用户
提问于 2020-06-06 09:12:20
回答 2查看 2.4K关注 0票数 2

我正在尝试生成代码中提到的令牌,但是它给了我在这一行上的错误,尽管我正在使用

作为token.SignedString(mySigningKey)密钥的tokenString,err := 是无效的类型。

有什么解决这个问题的建议吗?

谢谢

代码语言:javascript
复制
package main

import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
    "time"
)

var (
    mySigningKey = []byte("secret")
)

func GenerateJWT() (string, error) {

    token := jwt.New(jwt.SigningMethodES256)

    claims := token.Claims.(jwt.MapClaims)

    claims["authorized"] = true
    claims["user"] = "ravi"
    claims["exp"] = time.Now().Add(time.Minute + 30).Unix()

    tokenString, err := token.SignedString(mySigningKey)

    if err != nil {
        fmt.Println(err)
        fmt.Errorf("Something went wrong : %s", err.Error())
        return "", err

    }
    return tokenString, nil
}

func main() {
    tokenString, err := GenerateJWT()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(tokenString)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-07 00:03:39

此方法(SigningMethodES256)是ECDSA签名方法,您需要对键进行签名和验证,在您的示例中,最好改为SigningMethodHS256

代码语言:javascript
复制
    token := jwt.New(jwt.SigningMethodHS256)
票数 4
EN

Stack Overflow用户

发布于 2022-08-12 10:34:11

您也可以使用类似的东西来生成令牌。您可以根据您的口味修改signedDetails。这样您就可以重新使用代码。

代码语言:javascript
复制
   import ( 
   "log"
   "time"
   "github.com/dgrijalva/jwt-go"
    )
    type SignedDetails struct {
        Email     string
        FirstName string
        LastName  string
        Uid       string
        UserType  string
        jwt.StandardClaims
    }
    
  
    
    func GenerateAllTokens(
        email string,
        firstName string,
        lastName string,
        userType string,
        userId string) (
        signedToken string, signedRefreshToken string, error error) {
        claims := &SignedDetails{
            Email:     email,
            FirstName: firstName,
            LastName:  lastName,
            Uid:       userId,
            UserType:  userType,
            StandardClaims: jwt.StandardClaims{
                ExpiresAt: time.Now().Add(time.Hour * time.Duration(24)).Unix(),
            },
        }
        refreshClaims := &SignedDetails{
            StandardClaims: jwt.StandardClaims{
                ExpiresAt: time.Now().Add(time.Hour * time.Duration(24)).Unix(),
            },
        }
        token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(SECRET_KEY))
        if err != nil {
            log.Println(err)
            return
        }
        refreshToken, err := jwt.NewWithClaims(jwt.SigningMethodHS256, refreshClaims).SignedString([]byte(SECRET_KEY))
        if err != nil {
            log.Panicln(err)
            return
        }
        log.Panicln(token, refreshToken)
        return token, refreshToken, nil
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62229639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档