Ce tutoriel est génial pour JavaScript, mais ce serait _étonner_ de l'avoir dans Elixir des _premiers_ principaux à _comprendre_ comment authentifier une demande à l'aide de JWT.
elixir-example.md
@RobStallion, nous en avons brièvement discuté lors de l'appel d'aujourd'hui.
Veuillez ajouter tout autre critère d'acceptation que vous jugez pertinent.
@nelsonic J'ai passé en revue le code dans /example
pour mieux comprendre son fonctionnement afin que je puisse le recréer dans l'élixir.
Je pense avoir compris l'essentiel de ce qui se passe pour la plupart.
Vous créez quelques routes dans le fichier server.js et toute la logique de ces routes provient de helper.js .
Tout cela est assez simple à recréer dans Elixir (même sans serveur phx).
J'ai trouvé quelques packages/modules capables de créer des JWT dans Elixir. Ils sont:
jason
tant que dep. Le package le moins utilisé mentionné et ne semble pas être mis à jour/maintenu aussi souvent que les autres.)Jusqu'à présent, je n'ai utilisé que joken
mais il était assez simple de créer un JWT avec...
{:ok, token, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1})
IO.inspect(token)
LearnJwt.Token.verify_and_validate!(token)
|> IO.inspect(label: "===> ")
journaux....
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJhdWQiOiJKb2tlbiIsImV4cCI6MTU1MzYzODYyMCwiaWF0IjoxNTUzNjMxNDIwLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJtN3BuMnQ2MDBmMWN1Z3ZlazAwMDA1MyIsIm5iZiI6MTU1MzYzMTQyMH0.HQ-AQjvnIO7tIJF2joB45BJj7oLEznYSKUHZdMf9qe0"
===> : %{
"aud" => "Joken",
"exp" => 1553638620,
"iat" => 1553631420,
"iss" => "Joken",
"jti" => "2m7pn2t600f1cugvek000053",
"nbf" => 1553631420,
"user_id" => 1
}
La fonction verify_and_validate
s'assure également que le JWT n'a pas été falsifié. Si nous créons un JWT avec le secret par défaut, puis essayons de le déchiffrer avec un secret différent, nous obtenons une erreur...
config/dev.exs
config :joken,
default_signer: "secret",
testing: "test"
some_controller
{:ok, token2, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1}, :testing)
LearnJwt.Token.verify_and_validate!(token2)
on obtient l'erreur suivante...
Cela signifie que nous pouvons utiliser ces fonctions pour créer et vérifier nos JWT.
La partie que je ne sais pas exactement comment répliquer est la suivante , en envoyant le JWT au client.
Je peux l'envoyer au client dans l'argument assigns de la fonction de rendu comme ça...
render(conn, "index.html", jwt: token)
à quel point nous pourrions le stocker dans localStorage
.
Je n'ai pas encore évoqué la façon dont nous renverrons le JWT au serveur, mais je suppose que nous pouvons le faire avec js sur le front-end s'il n'y a pas de moyen "propre" de le faire à l'aide de formulaires phoenix. (Je n'ai pas vu d'exemple d'application phoenix utilisant le modèle phoenix pour renvoyer jwt au serveur, ce qui me porte à penser qu'il n'est pas "propre")
@RobStallion _considérez_ s'il vous plaît en utilisant https://hexdocs.pm/plug/Plug.Conn.html put_private/3
pour enregistrer le JTW sous auth_token
. Pour un exemple d'implémentation, voir : /lib/expected/plugs.ex#L88
LMK si vous avez envie de marcher + en parler à tout moment ce matin. 🤙
Avez-vous lu : https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭
Faire une petite pause pour le moment. Reviendra dans quelques jours
Commentaire le plus utile
Avez-vous lu : https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭