本教程非常适合 JavaScript,但将它放在 Elixir 中从 _first_ principals 到 _understand_ 如何使用 JWT 验证请求将是 _amaze_。
elixir-example.md
@RobStallion我们在今天的电话会议上简要讨论了这个问题。
请添加您认为相关的任何其他验收标准。
@nelsonic我一直在查看/example
的代码,以更好地了解它的工作原理,以便我在 elixir 中重新创建它。
我想我已经了解了大部分情况的要点。
您在server.js文件中创建了一些路由,这些路由的所有逻辑都来自helper.js 。
这一切都很简单,可以在 elixir 中重新创建(即使没有 phx 服务器)。
我发现了一些能够在 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。
我不完全确定如何复制的部分是this ,将 JWT 发送到客户端。
我可以像这样在渲染函数的assigns参数中将它发送给客户端......
render(conn, "index.html", jwt: token)
此时我们可以将它存储在localStorage
。
我还没有谈到我们将如何将 JWT 发送回服务器,但我假设如果没有使用 phoenix 表单的“干净”方法来做到这一点,我们可以在前端使用 js 来做到这一点。 (我还没有看到一个使用 phoenix 模板将 jwt 发送回服务器的 phoenix 应用程序示例,这让我认为它不“干净”)
@RobStallion请_考虑_使用https://hexdocs.pm/plug/Plug.Conn.html put_private/3
将 JTW 保存为auth_token
。 有关实现示例,请参阅: /lib/expected/plugs.ex#L88
LMK,如果你想在今天早上的任何时候走+聊它。 🤙
你有没有读过: https :
现在暂时休息一下。 几天后会回来
最有用的评论
你有没有读过: https :