このチュートリアルはJavaScriptに最適ですが、JWTを使用してリクエストを認証する方法を_first_プリンシパルから_理解_までElixirに含めると_amaze_になります。
elixir-example.md
というファイルに書き込みます@RobStallion今日の電話で、これについて簡単に話し合いました。
関連すると思われるその他の受け入れ基準を追加してください。
@nelsonic /example
のコードを確認して、エリクサーでコードを再作成するために、コードがどのように機能するかをよりよく理解しています。
ほとんどの場合、何が起こっているのかという要点を理解できたと思います。
server.jsファイルにいくつかのルートを作成し、これらのルートのすべてのロジックはhelper.jsから
これはすべて、(phxサーバーがなくても)elixirで再作成するのに十分簡単です。
elixirでJWTを作成できるパッケージ/モジュールをいくつか見つけました。 彼らです:
jason
のみがあります。言及されている最も使用されていないパッケージであり、他のパッケージほど頻繁に更新/保守されているようには見えません。)これまではjoken
しか使用していませんが、それを使用してJWTを作成するのはかなり簡単でした...
{:ok, token, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1})
IO.inspect(token)
LearnJwt.Token.verify_and_validate!(token)
|> IO.inspect(label: "===> ")
ログ...
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJhdWQiOiJKb2tlbiIsImV4cCI6MTU1MzYzODYyMCwiaWF0IjoxNTUzNjMxNDIwLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJtN3BuMnQ2MDBmMWN1Z3ZlazAwMDA1MyIsIm5iZiI6MTU1MzYzMTQyMH0.HQ-AQjvnIO7tIJF2joB45BJj7oLEznYSKUHZdMf9qe0"
===> : %{
"aud" => "Joken",
"exp" => 1553638620,
"iat" => 1553631420,
"iss" => "Joken",
"jti" => "2m7pn2t600f1cugvek000053",
"nbf" => 1553631420,
"user_id" => 1
}
verify_and_validate
関数は、JWTが改ざんされていないことも確認します。 デフォルトのシークレットでJWTを作成してから、別のシークレットで復号化しようとすると、エラーが発生します...
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)
次のエラーが発生します...
これは、これらの関数を使用してJWTを作成および検証できることを意味します。
複製する方法が完全にはわからない部分はこれで、JWTをクライアントに送信します。
次のように、render関数のassigns引数でクライアントに送信できます...
render(conn, "index.html", jwt: token)
その時点で、 localStorage
保存できます。
JWTをサーバーに送り返す方法についてはまだ触れていませんが、フェニックスフォームを使用して「クリーンな」方法がない場合は、フロントエンドのjsを使用してこれを行うことができると思います。 (フェニックスを使用してjwtをサーバーに送り返すフェニックスアプリケーションの例を見たことがないので、「クリーン」ではないと思います)
@RobStallionは、 https: //hexdocs.pm/plug/Plug.Conn.html put_private/3
を使用して_consider_して、JTWをauth_token
として保存してください。 実装例については、/ lib / plugins.ex#L88を参照してください。
LMKは、今朝の任意の時点でウォーク+トークしたい場合に使用します。 🤙
今のところ、これから少し休憩します。 数日で戻ってきます
最も参考になるコメント
https://hexdocs.pm/plug/Plug.Session.COOKIE.htmlを読んだことがあり