Dieses Tutorial ist großartig für JavaScript, aber es wäre _amaze_, es in Elixir von _ersten_ Prinzipalen bis hin zu _verstehen_, wie man eine Anfrage mit JWT authentifiziert, zu haben.
elixir-example.md
@RobStallion wir haben dies heute bei dem Anruf kurz besprochen.
Bitte fügen Sie alle anderen Akzeptanzkriterien hinzu, die Sie für relevant halten.
@nelsonic Ich habe den Code in /example
überprüft, um ein besseres Verständnis davon zu bekommen, wie er funktioniert, damit ich ihn in Elixir neu erstellen kann.
Ich glaube, ich habe den Kern dessen, was passiert, größtenteils verstanden.
Sie erstellen einige Routen in der Datei server.js und die gesamte Logik für diese Routen stammt von helper.js .
Dies ist alles einfach genug, um es in elixir (auch ohne phx-Server) neu zu erstellen.
Ich habe einige Pakete/Module gefunden, die JWTs in elixir erstellen können. Sie sind:
jason
als dep. am wenigsten benutztes Paket erwähnt und scheint nicht so oft aktualisiert/gepflegt zu werden wie die anderen.)Bisher habe ich nur joken
aber es war ziemlich einfach, damit ein JWT zu erstellen ...
{:ok, token, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1})
IO.inspect(token)
LearnJwt.Token.verify_and_validate!(token)
|> IO.inspect(label: "===> ")
Protokolle....
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJhdWQiOiJKb2tlbiIsImV4cCI6MTU1MzYzODYyMCwiaWF0IjoxNTUzNjMxNDIwLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJtN3BuMnQ2MDBmMWN1Z3ZlazAwMDA1MyIsIm5iZiI6MTU1MzYzMTQyMH0.HQ-AQjvnIO7tIJF2joB45BJj7oLEznYSKUHZdMf9qe0"
===> : %{
"aud" => "Joken",
"exp" => 1553638620,
"iat" => 1553631420,
"iss" => "Joken",
"jti" => "2m7pn2t600f1cugvek000053",
"nbf" => 1553631420,
"user_id" => 1
}
Die Funktion verify_and_validate
stellt außerdem sicher, dass das JWT nicht manipuliert wurde. Wenn wir ein JWT mit dem Standardgeheimnis erstellen und dann versuchen, es mit einem anderen Geheimnis zu entschlüsseln, erhalten wir eine Fehlermeldung ...
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)
wir erhalten folgenden Fehler...
Das bedeutet, dass wir diese Funktionen verwenden können, um unsere JWTs zu erstellen und zu verifizieren.
Der Teil, bei dem ich nicht ganz sicher bin, wie er repliziert werden soll, ist das Senden des JWT an den Client.
Ich kann es im Assigns-Argument der Render-Funktion so an den Client senden ...
render(conn, "index.html", jwt: token)
zu diesem Zeitpunkt könnten wir es in localStorage
speichern.
Ich habe noch nicht angesprochen, wie wir das JWT an den Server zurücksenden, aber ich gehe davon aus, dass wir dies mit js am Frontend tun können, wenn es keine "saubere" Möglichkeit gibt, dies mit Phoenix-Formularen zu tun. (Ich habe kein Beispiel für eine Phoenix-Anwendung gesehen, die Phoenix-Templating verwendet, um jwt zurück an den Server zu senden, was mich zu der Annahme führt, dass es nicht "sauber" ist.)
@RobStallion bitte _erwägen__ Sie mit https://hexdocs.pm/plug/Plug.Conn.html put_private/3
um das JTW als auth_token
zu speichern. Ein Implementierungsbeispiel finden Sie unter: /lib/expected/plugs.ex#L88
LMK, wenn Sie es heute Morgen zu einem beliebigen Zeitpunkt durchgehen möchten. 🤙
Haben Sie gelesen: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭
Machen Sie jetzt eine kurze Pause davon. Werde in ein paar Tagen wiederkommen
Hilfreichster Kommentar
Haben Sie gelesen: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭