Запомнить меня функциональность в Фениксе с помощью Guardian
Я разрабатываю систему входа в систему для веб-приложения, использующего Guardian для обработки аутентификации. В моем конфиге Guardian у меня есть
ttl: {30, :days}
Пользовательский токен сохраняется в файлах cookie по телефону:
defp login(conn, user) do
conn
|> Guardian.Plug.sign_in(user)
end
Таким образом, токен действует в течение 30 дней и остается там, даже если браузер закрыт (ожидаемое поведение для файла cookie). Пользователь, однако, должен иметь возможность выбирать, запоминаться или нет при входе в систему. Если нет, токен должен быть удален из куки при закрытии окна браузера. Я пытался установить
ttl: {0, :days}
и, кажется, для достижения необходимого поведения. Сказал, что:
- Является ли ttl: {0,:days} правильным способом аутентификации пользователя, пока окно браузера не закроется? Если да, то как программно изменить значение ttl в конвейере перед вызовом Guardian.Plug.sign_in(conn, user)?
- Может ли Guardian хранить токен в файлах cookie или в хранилище сеансов в зависимости от выбора пользователя? (куки для избранных запомни меня, сессионное хранилище, если нет)
1 ответ
Может быть, проверить Guardian.Plug.remember_me/4
функция Есть пример на GitHub Guardian.
# Set a "refresh" token directly on a cookie.
# Can be used in conjunction with `Guardian.Plug.VerifyCookie`
conn = MyApp.Guardian.Plug.remember_me(conn, resource)
Изменение TTL здесь очень опасно, потому что это означает, что сразу после входа в систему у вас истек токен, поэтому каждый отдельный маршрут API не будет работать, если вы авторизуете запрос на основе токена.
Guardian может сохранять сеанс и токен одновременно, поэтому, вероятно, вам потребуется настроить систему аутентификации в соответствии с вашими потребностями.