Я пишу аутентификацию для Phoenix Elixir приложение. У меня есть Plug в моем Браузер Pipeline, который проверяет user_id в сеансе. Если он существует, я добавить пользователя в свя:сеанс Phoenix не удаляется
router.ex
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug AccountMgr.Plugs.CheckSessionForUser
end
check_for_user_on_session.ex
def call(conn, _opts) do
user_id = get_session(conn, :user_id)
cond do
user = user_id && Repo.get(User, user_id) ->
assign(conn, :current_user, user)
true ->
assign(conn, :current_user, nil)
end
end
В моих Войти функций добавляют user_id к сессии если учетные данные верны:
cond do
user && checkpw(password, user.password_hash) ->
conn
|> assign(:user, user)
|> put_session(:user_id, user.id)
|> configure_session(renew: true)
|> redirect(to: portfolio_path(conn, :index))
user ->
{:error, :unauthorised, conn}
true ->
dummy_checkpw()
{:error, :not_found, conn}
end
В моей функции «Выход» я звоню configure_session (conn, drop: true)
.
def logout(conn, _params) do
configure_session(conn, drop: true)
redirect(conn, to: authentication_path(conn, :index))
end
Я использую IO.puts
показать user_id
на сессии до и после того, как я вызываю функцию configure_session
user_id
и по-прежнему присутствует.
Я также протоколирование user_id в check_for_user_on_session.ex Штекер, и это также показывает user_id подарок, когда он вызывается после перенаправления из функции выхода из системы.
Я не уверен, что мне не хватает, но я ожидаю, что куки сессии будут уничтожены после того, как функции выхода из системы и новый созданный для следующей загрузки страницы через маршрутизатор и Browser трубопровода
Спасибо заранее
Когда вы говорите, что используете 'IO.puts', чтобы показать' user_id', я думаю, вам нужно проверить его со следующим запросом, а не с текущим –
Спасибо Дэвиду, я записал ту же информацию в Plug который проверяет сеанс user_id (он находится в конвейере браузера), и он существует для загрузки страницы перенаправления. – abarr