يعد هذا البرنامج التعليمي رائعًا لجافا سكريبت ، ولكن سيكون من المدهش أن تحصل عليه في الإكسير بدءًا من المبادئ الأساسية لفهم كيفية مصادقة الطلب باستخدام JWT.
elixir-example.md
RobStallion ناقشنا هذا باختصار في المكالمة اليوم.
يرجى إضافة أي معايير قبول أخرى تشعر أنها ذات صلة.
nelsonic لقد كنت /example
للحصول على فهم أفضل لكيفية عمله حتى أعيد إنشائه في الإكسير.
أعتقد أنني فهمت جوهر ما يحدث في معظم الأحيان.
يمكنك إنشاء بعض المسارات في ملف server.js وكل منطق هذه المسارات يأتي من helper.js .
كل هذا واضح بما يكفي لإعادة إنشائه في الإكسير (حتى بدون خادم phx).
لقد وجدت بعض الحزم / الوحدات القادرة على إنشاء JWTs في الإكسير. هم انهم:
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)
حصلنا على الخطأ التالي ...
هذا يعني أنه يمكننا استخدام هذه الوظائف لإنشاء JWTs الخاصة بنا والتحقق منها.
الجزء لست تماما متأكدا من كيفية تكرار هو هذا ، وإرسال JWT إلى العميل.
يمكنني إرسالها إلى العميل في وسيطة التخصيص الخاصة بوظيفة العرض مثل ...
render(conn, "index.html", jwt: token)
عند هذه النقطة يمكننا تخزينها في localStorage
.
لم أتطرق بعد إلى كيفية إرسال JWT مرة أخرى إلى الخادم ولكن أفترض أنه يمكننا القيام بذلك باستخدام js في الواجهة الأمامية إذا لم تكن هناك طريقة "نظيفة" للقيام بذلك باستخدام نماذج العنقاء. (لم أر مثالًا واحدًا لتطبيق طائر الفينيق باستخدام قالب فينيكس لإرسال jwt مرة أخرى إلى الخادم مما يقودني إلى الاعتقاد بأنه ليس "نظيفًا")
RobStallion من فضلك _consider_ باستخدام https://hexdocs.pm/plug/Plug.Conn.html put_private/3
لحفظ JTW كـ auth_token
. للحصول على مثال للتنفيذ ، راجع: /lib/limited/plugs.ex#L88
LMK إذا كنت تريد السير + التحدث من خلاله في أي وقت هذا الصباح. 🤙
هل قرأت: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ؟ 💭
أخذ استراحة قصيرة من هذا الآن. سوف أعود إلى في غضون يومين
التعليق الأكثر فائدة
هل قرأت: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ؟ 💭