Getting error function Joken.token/1 is undefined or private

I am getting the JWT Token from Google/Gmail Oath and now, I want to decode it using the Joken library. Following are the step I have done-

1- Added the code in mix.exs

{:joken, "~> 2.0"},

2- Added the code in config/dev.exs

config :joken, default_signer: "secret"

3- In new file, make a module

defmodule Apollo.Token do
 use Joken.Config

 def decode(token) do
   token
   |> Joken.token()
   |> Joken.peek()
 end
end,

4- Now, calling module from this like -
struct = Apollo.Token.decode(token)

Due to the 4th step, I am getting error that is Gettting error function Joken.token/1 is undefined or private. Your response will be highly appreciable.

did you run mix deps.get after step 1?

Also I can’t find token/1 function in module Joken in docs

It was available in 1.0… it seems as if someone mixed current and outdated instructions.

The code in your decode function appears to be written for Joken 1.x - Joken.token exists there.

The documentation now warns against using peek_* functions in most cases, as they don’t validate the signature. OTOH, the Google docs for OpenID Connect suggest it may not be a hard requirement.

1 Like

ok, can you please guide me- how i can do the same in version 2.0

Currently, I am using version 2.0. How can I do with this version?

Can you show what you’ve tried so far within the Joken 2.0 docs?

signer = Joken.Signer.create("HS256", "secret")

{:ok, token_with_default_claims} = MyApp.Token.generate_and_sign(%{}, signer)

extra_claims = %{"user_id" => "some_id"}
token_with_default_plus_custom_claims = MyApp.Token.generate_and_sign!(extra_claims, signer)

{:ok, claims} = MyApp.Token.verify_and_validate(token, signer)

I have used this code and this is running fine. here first i create signer and then used that signer to verify the token, but when i used this signer with id_token(received from Gmail OAuth) this returns me an error. Why i need signer and all because on online platforms(https://www.jsonwebtoken.io/) i am getting json by just pasting the id_token(how i can do the same using joken)

1 Like

To works with JWT and Google,you need to use RS256 instead H256.

signer = Joken.Signer.create("RS256", %{"pem" => id_token})