не получить дополнительную информацию. из логина ответа в gin-jwt - PullRequest
0 голосов
/ 12 марта 2019

Я попытался применить gin-jwt к бэкенду (gin) моего приложения реагирования, хочу получить идентификатор пользователя и информацию о роли.для RBAC.я могу войти в систему и получить токен соответственно, но когда я попытался получить информацию о роли из функции LoginResponse, поле ID пользователя и роли было пустым.

Я хочу знать поток входа в систему, почему он не работает?

PayloadFunc:

authMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
    Realm:       "test zone",
    Key:         []byte("mysecretkey"),
    Timeout:     time.Hour,
    MaxRefresh:  time.Hour,
    IdentityKey: identityKey,

    PayloadFunc: func(data interface{}) jwt.MapClaims {
        if v, ok := data.(*User); ok {
            return jwt.MapClaims{
                identityKey: v.UserName,
                role: v.Role,
                email: v.Email,
            }
        }
        return jwt.MapClaims{}
    },

Аутентификатор:

Authenticator: func(c *gin.Context) (interface{}, error) {
        var loginVals Login
        if err := c.BindJSON(&loginVals); err != nil {
            return "", jwt.ErrMissingLoginValues
        }
        plainpass := loginVals.Password
        session, err := mgo.Dial(SERVER)
        ce(err)
        colQuerier := bson.M{"username": loginVals.Username}
        err = session.DB(DATABASE).C("asys_users").Find(colQuerier).One(&loginVals)
        ce(err)
        defer session.Close()
        if CheckPasswordHash(plainpass, loginVals.Password) {
            return &User{
                UserName:  loginVals.Username,
                Role:  loginVals.Role,
                Email: loginVals.Email,
            }, nil
        }

        return nil, jwt.ErrFailedAuthentication
    },

LoginResponse:

LoginResponse: func(c *gin.Context, code int, token string, expire time.Time) {
        claims := jwt.ExtractClaims(c)
        fmt.Println(claims) . // only map[], nothing
        c.JSON(http.StatusOK, gin.H{
            "code":   http.StatusOK,
            "token":  token,
            "expire": expire.Format(time.RFC3339),
            "userid": claims["id"], // this field is null
            "role": claims["role"],  // this field is null  
            "email": claims["email"],  // this field is null
        })
    },

1 Ответ

0 голосов
/ 08 апреля 2019

Вы не можете получить extractClaims из конечной точки входа в систему, потому что в заголовке авторизации нет токена. В чит-способе устанавливается новая переменная для контекста из функции Authenticator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...