No pointer embedding in the example (#255)

Fixes #223
This commit is contained in:
Christian Banse 2022-11-08 15:43:45 +01:00 committed by GitHub
parent 35053d4e20
commit 2101c1f4bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 6 deletions

View File

@ -73,7 +73,7 @@ type CustomerInfo struct {
} }
type CustomClaimsExample struct { type CustomClaimsExample struct {
*jwt.RegisteredClaims jwt.RegisteredClaims
TokenType string TokenType string
CustomerInfo CustomerInfo
} }
@ -142,7 +142,7 @@ func createToken(user string) (string, error) {
// set our claims // set our claims
t.Claims = &CustomClaimsExample{ t.Claims = &CustomClaimsExample{
&jwt.RegisteredClaims{ jwt.RegisteredClaims{
// set the expire time // set the expire time
// see https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4 // see https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Minute * 1)), ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Minute * 1)),

View File

@ -42,10 +42,13 @@ func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) {
return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc)
} }
// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default // ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object implementing the Claims
// object implementing the Claims interface. This provides default values which // interface. This provides default values which can be overridden and allows a caller to use their own type, rather
// can be overridden and allows a caller to use their own type, rather than // than the default MapClaims implementation of Claims.
// the default MapClaims implementation of Claims. //
// Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims),
// make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the
// proper memory for it before passing in the overall claims, otherwise you might run into a panic.
func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) {
token, parts, err := p.ParseUnverified(tokenString, claims) token, parts, err := p.ParseUnverified(tokenString, claims)
if err != nil { if err != nil {

View File

@ -99,6 +99,11 @@ func Parse(tokenString string, keyFunc Keyfunc, options ...ParserOption) (*Token
return NewParser(options...).Parse(tokenString, keyFunc) return NewParser(options...).Parse(tokenString, keyFunc)
} }
// ParseWithClaims is a shortcut for NewParser().ParseWithClaims().
//
// Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims),
// make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the
// proper memory for it before passing in the overall claims, otherwise you might run into a panic.
func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc, options ...ParserOption) (*Token, error) { func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc, options ...ParserOption) (*Token, error) {
return NewParser(options...).ParseWithClaims(tokenString, claims, keyFunc) return NewParser(options...).ParseWithClaims(tokenString, claims, keyFunc)
} }