Este tutorial é ótimo para JavaScript, mas seria _amaze_ tê-lo no Elixir de _primeiros_ principaiss para _entender_ como autenticar uma solicitação usando JWT.
elixir-example.md
@RobStallion , discutimos isso brevemente na teleconferência de hoje.
Adicione quaisquer outros critérios de aceitação que considere relevantes.
@nelsonic Estive revisando o código em /example
para obter uma melhor compreensão de como ele funciona para que eu possa recriá-lo no elixir.
Acho que entendi a essência do que está acontecendo na maior parte.
Você cria algumas rotas no arquivo server.js e toda a lógica para essas rotas vem de helper.js .
Isso tudo é simples o suficiente para recriar no elixir (mesmo sem um servidor phx).
Eu encontrei alguns pacotes / módulos que são capazes de criar JWTs no elixir. Eles estão:
jason
como um dep. O pacote menos usado mencionado e não parece ser atualizado / mantido com a freqüência dos outros.)Até agora, usei apenas joken
mas foi bastante simples criar um JWT com ele ...
{:ok, token, _} = LearnJwt.Token.generate_and_sign(%{user_id: 1})
IO.inspect(token)
LearnJwt.Token.verify_and_validate!(token)
|> IO.inspect(label: "===> ")
Histórico....
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJhdWQiOiJKb2tlbiIsImV4cCI6MTU1MzYzODYyMCwiaWF0IjoxNTUzNjMxNDIwLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJtN3BuMnQ2MDBmMWN1Z3ZlazAwMDA1MyIsIm5iZiI6MTU1MzYzMTQyMH0.HQ-AQjvnIO7tIJF2joB45BJj7oLEznYSKUHZdMf9qe0"
===> : %{
"aud" => "Joken",
"exp" => 1553638620,
"iat" => 1553631420,
"iss" => "Joken",
"jti" => "2m7pn2t600f1cugvek000053",
"nbf" => 1553631420,
"user_id" => 1
}
A função verify_and_validate
também garante que o JWT não foi adulterado. Se criarmos um JWT com o segredo padrão e, em seguida, tentarmos descriptografá-lo com um segredo diferente, obteremos um erro ...
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)
obtemos o seguinte erro ...
Isso significa que podemos usar essas funções para criar e verificar nossos JWTs.
A parte que não tenho certeza de como replicar é esta , enviar o JWT para o cliente.
Posso enviar para o cliente no argumento assigns da função render assim ...
render(conn, "index.html", jwt: token)
nesse ponto, poderíamos armazená-lo em localStorage
.
Ainda não mencionei como enviaremos o JWT de volta ao servidor, mas presumo que podemos fazer isso com js no front end, se não houver uma maneira "limpa" de fazer isso usando o phoenix forms. (Eu não vi um exemplo de um aplicativo Phoenix usando o modelo Phoenix para enviar jwt de volta ao servidor, o que me leva a pensar que não está "limpo")
@RobStallion _consider_ usando https://hexdocs.pm/plug/Plug.Conn.html put_private/3
para salvar o JTW como auth_token
. Para obter um exemplo de implementação, consulte: /lib/expected/plugs.ex#L88
LMK se você quiser caminhar + falar sobre isso a qualquer momento esta manhã. 🤙
Você já leu: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭
Fazendo uma pequena pausa agora. Voltará em alguns dias
Comentários muito úteis
Você já leu: https://hexdocs.pm/plug/Plug.Session.COOKIE.html ? 💭