2014-09-15 20 views
5

Có thể cho tôi biết lý do tại sao ví dụ sau (từ https://github.com/dgrijalva/jwt-go) không hoạt động?và phân tích mã thông báo với 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(":(") 
} 

tôi nhận được một lỗi nói rằng "không thể sử dụng Func đen (loại func (* jwt.Token) ([] byte, lỗi)) as type jwt.Keyfunc trong lập luận để jwt.Parse"

Tôi đã cố gắng sử dụng mã từ vài ví dụ khác nhau nhưng vẫn luôn kết thúc với cùng một lỗi này.

Trả lời

6

Chức năng Parse hy vọng

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

Bạn cần phải trả lại interface{}, không byte[] trong chức năng của bạn theo nghĩa đen.
(có thể sử dụng một byte.Buffer để quấn byte[], mà sau đó bạn có thể đọc như trong "Convert arbitrary Golang interface to byte array")

Gert Cuykens điểm ra trong các ý kiến ​​để issue 36: commit e1571c8 nên đã cập nhật ví dụ.
Other examples like this gist cũng cần được cập nhật.

+0

Vâng, tôi sẽ ... Đó là nó, bây giờ mọi thứ dường như hoạt động như mong đợi. Điều hài hước nhất là trong Github của jwt-go họ sử dụng byte [] trong ví dụ. Cảm ơn! – QlliOlli

+0

Lưu ý rằng thay đổi giao diện {} đã xảy ra khá gần đây: https://github.com/dgrijalva/jwt-go/commit/23cb3af02c1259a5058fcb1402424442ec9b03ab Có thể muốn ping tác giả sửa tài liệu của họ. – dyoo

+0

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

Các vấn đề liên quan