code: func (c StandardClaims) Valid() error {
  	vErr := new(ValidationError)
  	now := TimeFunc().Unix()
  
  	// The claims below are optional, by default, so if they are set to the
  	// default value in Go, let's not fail the verification for them.
  	if c.VerifyExpiresAt(now, false) == false {
  		delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0))
  		vErr.Inner = fmt.Errorf("token is expired by %v", delta)
  		vErr.Errors |= ValidationErrorExpired
  	}
  
  	if c.VerifyIssuedAt(now, false) == false {
  		vErr.Inner = fmt.Errorf("Token used before issued")
  		vErr.Errors |= ValidationErrorIssuedAt
  	}
  
  	if c.VerifyNotBefore(now, false) == false {
  		vErr.Inner = fmt.Errorf("token is not valid yet")
  		vErr.Errors |= ValidationErrorNotValidYet
  	}
  
  	if vErr.valid() {
  		return nil
  	}
  
  	return vErr
  }
docs: // Validates time based claims "exp, iat, nbf".
  // There is no accounting for clock skew.
  // As well, if any of the above claims are not in the token, it will still
  // be considered a valid claim.