@@ -36,19 +36,21 @@ func NewParser(options ...ParserOption) *Parser {
3636 return p
3737}
3838
39- // Parse parses, validates, verifies the signature and returns the parsed token.
40- // keyFunc will receive the parsed token and should return the key for validating.
39+ // Parse parses, validates, verifies the signature and returns the parsed token. keyFunc will
40+ // receive the parsed token and should return the key for validating.
4141func (p * Parser ) Parse (tokenString string , keyFunc Keyfunc ) (* Token , error ) {
4242 return p .ParseWithClaims (tokenString , MapClaims {}, keyFunc )
4343}
4444
45- // ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object implementing the Claims
46- // interface. This provides default values which can be overridden and allows a caller to use their own type, rather
47- // than the default MapClaims implementation of Claims.
45+ // ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object
46+ // implementing the Claims interface. This provides default values which can be overridden and
47+ // allows a caller to use their own type, rather than the default MapClaims implementation of
48+ // Claims.
4849//
49- // Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims),
50- // make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the
51- // proper memory for it before passing in the overall claims, otherwise you might run into a panic.
50+ // Note: If you provide a custom claim implementation that embeds one of the standard claims (such
51+ // as RegisteredClaims), make sure that a) you either embed a non-pointer version of the claims or
52+ // b) if you are using a pointer, allocate the proper memory for it before passing in the overall
53+ // claims, otherwise you might run into a panic.
5254func (p * Parser ) ParseWithClaims (tokenString string , claims Claims , keyFunc Keyfunc ) (* Token , error ) {
5355 token , parts , err := p .ParseUnverified (tokenString , claims )
5456 if err != nil {
@@ -85,35 +87,32 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf
8587 return token , & ValidationError {Inner : err , Errors : ValidationErrorUnverifiable }
8688 }
8789
90+ // Perform validation
91+ token .Signature = parts [2 ]
92+ if err := token .Method .Verify (strings .Join (parts [0 :2 ], "." ), token .Signature , key ); err != nil {
93+ return token , & ValidationError {Inner : err , Errors : ValidationErrorSignatureInvalid }
94+ }
95+
8896 vErr := & ValidationError {}
8997
9098 // Validate Claims
9199 if ! p .SkipClaimsValidation {
92100 if err := token .Claims .Valid (); err != nil {
93-
94101 // If the Claims Valid returned an error, check if it is a validation error,
95102 // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set
96103 if e , ok := err .(* ValidationError ); ! ok {
97104 vErr = & ValidationError {Inner : err , Errors : ValidationErrorClaimsInvalid }
98105 } else {
99106 vErr = e
100107 }
108+ return token , vErr
101109 }
102110 }
103111
104- // Perform validation
105- token .Signature = parts [2 ]
106- if err = token .Method .Verify (strings .Join (parts [0 :2 ], "." ), token .Signature , key ); err != nil {
107- vErr .Inner = err
108- vErr .Errors |= ValidationErrorSignatureInvalid
109- }
110-
111- if vErr .valid () {
112- token .Valid = true
113- return token , nil
114- }
112+ // No errors so far, token is valid.
113+ token .Valid = true
115114
116- return token , vErr
115+ return token , nil
117116}
118117
119118// ParseUnverified parses the token but doesn't validate the signature.
0 commit comments