Авторизация для подписок Graphql (Absinthe) с токеном
Я пытаюсь добавить аутентификацию в этот тест подписки, так как я продолжаю получать Not Authorized
когда я бегу mix test
, Я видел, что вам нужно добавить мутацию входа в систему push_doc
функция, но мне было интересно. Есть ли способ использовать только токен для аутентификации, как обычные мутации, которые используют:
conn =
build_conn()
|> put_req_header("authorization", @token)
|> get("/api", query: @query)
assert json_response(conn, 200) == %{
"data" => %{
"authors" => [%{"name" => "Jennifer"}]
}
}
Это мой текущий тест подписки:
test "1. Subscribe to createAuthor", %{socket: socket} do
# setup a subscription
ref = push_doc(socket, @subscription)
assert_reply(ref, :ok, %{subscriptionId: subscription_id})
# run a mutation to trigger the subscription
ref = push_doc(socket, @mutation)
assert_reply(ref, :ok, reply)
assert %{
data: %{
"createAuthor" => %{
"name" => "Jennifer"
}
}
} = reply
# check to see if we got subscription data
expected = %{
result: %{
data: %{
"createAuthor" => %{
"name" => "Jennifer"
}
}
},
subscriptionId: subscription_id
}
assert_push("subscription:data", push)
assert expected == push
end
Мой общий вопрос Могу ли я только передать token
(который я жестко закодировал) в функцию аутентификации для подписок?
1 ответ
Вы можете создать токен со сроком действия примерно через 100 лет, подписанный вашим ключом. Жестко запрограммируйте это, и это будет хорошо, пока вы используете тот же SK.
Добавляете ли вы "предъявителя" перед своим токеном?
Мне удалось сделать тест следующим образом, сделав мутацию с помощью put_req_header()
test "1. Subscribe to createAuthor", %{socket: socket} do
# setup a subscription
ref = push_doc(socket, @subscription)
assert_reply(ref, :ok, %{subscriptionId: subscription_id})
# run a mutation to trigger the subscription
conn =
post(
build_conn()
|> put_req_header("authorization", @token),
"/api",
query: @mutation
)
assert json_response(conn, 200) == %{
"data" => %{
"createAuthor" => %{
"name" => "Jennifer"
}
}
}
# check to see if we got subscription data
expected = %{
result: %{
data: %{
"createAuthor" => %{
"name" => "Jennifer"
}
}
},
subscriptionId: subscription_id
}
assert_push("subscription:data", push)
assert expected == push
end