oauth icon indicating copy to clipboard operation
oauth copied to clipboard

Documentation on how to use context on client. Why contextKey type?

Open FranciscoBarao opened this issue 3 years ago • 2 comments

After adding the middleware router.Use(oauth.Authorize("mySecretKey-10101", nil)) and being able to authorize a user, I had some issues figuring out how to access the information of the access token using the Context.

The middleware.go file adds the token information to the Context using a new type that is basically a string. Code in question: `type contextKey string

const ( CredentialContext contextKey = "oauth.credential" ClaimsContext contextKey = "oauth.claims" ScopeContext contextKey = "oauth.scope" TokenTypeContext contextKey = "oauth.tokentype" AccessTokenContext contextKey = "oauth.accesstoken" )`

Given that the context is accessed using r.Context().Value(key) and that key is basically a string, I thought I had to access the claims just by using r.Context().Value("oauth.claims") but this approach returned nil.

To successfully access the token information in the context I had to import the oauth package and use the consts that I put above since their type is not a string but contextKey. Working Example: r.Context().Value(oauth.ClaimsContext)

I was wondering why this contextKey type is used instead of using a string

FranciscoBarao avatar Oct 28 '22 16:10 FranciscoBarao

This type is used to avoid mistakes and package colision you can read more about this https://medium.com/@matryer/context-keys-in-go-5312346a868d

rkgarcia avatar Feb 22 '23 02:02 rkgarcia