Learn-json-web-tokens: ترجمة المثال إلى الإكسير

تم إنشاؤها على ٢٥ مارس ٢٠١٩  ·  4تعليقات  ·  مصدر: dwyl/learn-json-web-tokens

يعد هذا البرنامج التعليمي رائعًا لجافا سكريبت ، ولكن سيكون من المدهش أن تحصل عليه في الإكسير بدءًا من المبادئ الأساسية لفهم كيفية مصادقة الطلب باستخدام JWT.

لكى يفعل

  • [] تحقق من حزمة التحقق / التوقيع JWT التي يمكننا استخدامها في Elixir
  • [] اكتب خادم ويب أساسي يتطلب رأس JWT Auth للوصول إلى مورد محمي
    للحصول على خادم ويب Elixir أساسي ، راجع: https://github.com/dwyl/hits-elixir (لا يوجد طائر الفينيق! 😮)
  • [] الاختبارات!
  • [] اكتب هذا في ملف يسمى elixir-example.md

RobStallion ناقشنا هذا باختصار في المكالمة اليوم.
يرجى إضافة أي معايير قبول أخرى تشعر أنها ذات صلة.

enhancement help wanted technical

التعليق الأكثر فائدة

ال 4 كومينتر

nelsonic لقد كنت /example للحصول على فهم أفضل لكيفية عمله حتى أعيد إنشائه في الإكسير.

أعتقد أنني فهمت جوهر ما يحدث في معظم الأحيان.
يمكنك إنشاء بعض المسارات في ملف server.js وكل منطق هذه المسارات يأتي من helper.js .

كل هذا واضح بما يكفي لإعادة إنشائه في الإكسير (حتى بدون خادم phx).

لقد وجدت بعض الحزم / الوحدات القادرة على إنشاء JWTs في الإكسير. هم انهم:

  • جوزيه
  • joken (يستخدم jose كوسيلة)
  • [الوصي] (يستخدم jose كوسيط. أكثر من حزمة مصادقة من مجرد jwt)
  • yajwt (يحتوي فقط على 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)

حصلنا على الخطأ التالي ...

image

هذا يعني أنه يمكننا استخدام هذه الوظائف لإنشاء 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 إذا كنت تريد السير + التحدث من خلاله في أي وقت هذا الصباح. 🤙

أخذ استراحة قصيرة من هذا الآن. سوف أعود إلى في غضون يومين

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

rjmk picture rjmk  ·  9تعليقات

NE-SmallTown picture NE-SmallTown  ·  5تعليقات

alanshaw picture alanshaw  ·  6تعليقات

nelsonic picture nelsonic  ·  5تعليقات

joepie91 picture joepie91  ·  18تعليقات