2014-09-15 6 views
5

Может ли кто-нибудь сказать мне, почему следующий (от https://github.com/dgrijalva/jwt-go) пример не работает?go и parsing token с jwt-go

token, err := jwt.Parse(myToken, func(token *jwt.Token) ([]byte, error) { 
    return myLookupKey(token.Header["kid"]) 
}) 

if err == nil && token.Valid { 
    deliverGoodness("!") 
} else { 
    deliverUtterRejection(":(") 
} 

Я получаю сообщение об ошибке сказав "не может использовать FUNC буквального (тип FUNC (* jwt.Token) ([] байт, ошибка)) как тип jwt.Keyfunc в аргументе jwt.Parse"

Я пытался использовать код из нескольких различных примеров jwt-go, но всегда получал эту же ошибку.

ответ

6

Функция Parse ожидает

type Keyfunc func(*Token) (interface{}, error) 

Вы должны вернуть interface{}, не byte[] в вашей функции буквального.
(возможно, с помощью byte.Buffer обернуть byte[], что вы можете прочитать, как в «Convert arbitrary Golang interface to byte array»)

Gert Cuykens указывает в комментариях к issue 36: commit e1571c8 должен был обновлен пример.
Other examples like this gist также необходимо обновить.

+0

Ну, я буду ... Вот и все, теперь все работает так, как ожидалось. Самое забавное в том, что в Github jwt-go в этом примере используется байт []. Благодаря! – QlliOlli

+0

Обратите внимание, что изменение в интерфейсе {} произошло довольно недавно: https://github.com/dgrijalva/jwt-go/commit/23cb3af02c1259a5058fcb1402424442ec9b03ab Возможно, вы захотите отследить автора, чтобы исправить свою документацию. – dyoo

+0

https://github.com/dgrijalva/jwt-go/issues/36 –