я был в предположении, что create_session
если endpoint.ex был настроен на использование куки-магазин, будет установлен заголовок SET-COOKIE
ответаcreate_session не устанавливает SET-COOKIE заголовок
# The session will be stored in the cookie and signed,
# this means its contents can be read but not tampered with.
# Set :encryption_salt if you would also like to encrypt it.
plug Plug.Session,
log: :debug,
store: :cookie,
key: "some_key",
signing_salt: "some_salt"
это мой контроллер аутентификации (только часть его)
def callback(%{ assigns: %{ ueberauth_auth: auth } } = conn, params) do
params = build_params(auth)
user = find_or_create_user params
conn = put_session(conn, :current_user, user)
IO.inspect conn.resp_headers
IO.inspect get_session(conn, :current_user)
render conn, "index.html"
#Helpers.redirect!(conn, "/")
end
def build_params(auth) do
%{email: auth.info.email, github_token: auth.credentials.token, github_user: auth.info.nickname}
end
def find_or_create_user(params) do
case DBRepo.get_by(User, email: params.email) do
nil ->
User.changeset(%User{}, params)
|> DBRepo.insert
results ->
results
end
end
IO.inspect conn.resp_headers
возвращает
[{"cache-control", "max-age=0, private, must-revalidate"}, {"x-request-id", "vh8l2deodne1k2iloa4c3e4qdpmh857n"}, {"x-frame-options", "SAMEORIGIN"}, {"x-xss-protection", "1; mode=block"}, {"x-content-type-options", "nosniff"}]
IO.inspect get_session(conn, :current_user)
возвращает пользователя, как ожидается,
Где определяется 'create_session'? Он должен возвращать соединение, в этом случае вы должны назначить его обратно ('conn = case find_user (...) do ... end'), потому что структуры Elixir неизменяемы. – Dogbert
Существует ли файл cookie в фактическом ответе, отправленном в браузер? Plug.Session устанавливает фактический файл cookie сеанса непосредственно перед отправкой ответа (используя 'register_before_send'), поэтому он не будет отображаться в' conn.resp_headers', но он должен быть там, если вы сделаете реальный запрос. – Dogbert
ОК, я понял, я не мог видеть файл cookie, потому что он был httpOnly: правда спасибо за помощь. Вы хотите получить ответ со всей этой информацией, а также пометить его как ответ :) – Billybonks