Learn-json-web-tokens: рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╡рд╛рдж Elixir . рдореЗрдВ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдорд╛рд░реНрдЪ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dwyl/learn-json-web-tokens

рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ _amaze_ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрдореГрдд рдореЗрдВ _first_ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╕реЗ _рд╕рдордЭреЗрдВ_ рдХреИрд╕реЗ JWT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • [ ] рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдПрд▓рд┐рдХреНрд╕рд┐рд░ рдореЗрдВ рд╣рдо рдХрд┐рд╕ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░/рд╕рддреНрдпрд╛рдкрди рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • [ ] рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╡реЗрдм рд╕рд░реНрд╡рд░ рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП JWT Auth рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
    рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЕрдореГрдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ: https://github.com/dwyl/hits-elixir (рдХреЛрдИ рдлреАрдирд┐рдХреНрд╕ рдирд╣реАрдВ! )
  • [ ] рдЯреЗрд╕реНрдЯ!
  • [ ] рдЗрд╕реЗ elixir-example.md рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВ

@RobStallion рд╣рдордиреЗ рдЖрдЬ рдХреЙрд▓ рдкрд░ рдЗрд╕ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреАред
рдХреГрдкрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реНрд╡реАрдХреГрддрд┐ рдорд╛рдирджрдВрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧреЗред

enhancement help wanted technical

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛ рд╣реИ: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? ЁЯТн

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@nelsonic рдореИрдВ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП /example рдореЗрдВ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдореГрдд рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╕рд╛рд░ рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдВред
рдЖрдк server.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдорд╛рд░реНрдЧ helper.js рд╕реЗ

рдпрд╣ рд╕рдм рдЕрдореГрдд рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реАрдзрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ phx рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рднреА)ред

рдореБрдЭреЗ рдХреБрдЫ рдкреИрдХреЗрдЬ/рдореЙрдбреНрдпреВрд▓ рдорд┐рд▓реЗ рд╣реИрдВ рдЬреЛ рдЕрдореГрдд рдореЗрдВ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд╡реЗ:

  • рдЬреЛрд╕
  • рдЬреЛрдХреЗрди (рдЬреЛрд╕ рдХреЛ рдПрдХ
  • [рдЕрднрд┐рднрд╛рд╡рдХ] (рдЬреЛрд╕ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдПрдХ jwt рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЕрдзрд┐рдХ)
  • yajwt (рдХреЗрд╡рд▓ рдПрдХ jason ред рдХрдо рд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреНрд╕рд░ рдЕрджреНрдпрддрди/рд░рдЦрд░рдЦрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред)

рдЕрдм рддрдХ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ joken рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛ ...

    {: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 рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╣рд╕реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд░рд╣рд╕реНрдп рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ ...
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

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдмрдирд╛рдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд┐рд╕ рднрд╛рдЧ рдХреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЙрд╕реЗ рдХреИрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рд╣реИ , рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рднреЗрдЬрдирд╛ред

рдореИрдВ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд╕рд╛рдЗрди рддрд░реНрдХ рдореЗрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ ...

render(conn, "index.html", jwt: token)

рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдЗрд╕реЗ localStorage рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рдЫреБрдЖ рд╣реИ рдХрд┐ рд╣рдо рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рдХреИрд╕реЗ рднреЗрдЬреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдлреАрдирд┐рдХреНрд╕ рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ "рд╕рд╛рдл" рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред (рдореИрдВрдиреЗ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдлреАрдирд┐рдХреНрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреАрдирд┐рдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╕рд╛рдл" рдирд╣реАрдВ рд╣реИ)

@RobStallion рдХреГрдкрдпрд╛ JTW рдХреЛ auth_token рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП https://hexdocs.pm/plug/Plug.Conn.html put_private/3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ: /lib/expected/plugs.ex#L88
LMK рдпрджрд┐ рдЖрдк рдЖрдЬ рд╕реБрдмрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдирд╛ + рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред ЁЯдЩ

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛ рд╣реИ: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? ЁЯТн

рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рдЫреЛрдЯрд╛ рдмреНрд░реЗрдХ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕