Как сохранить значения в сеансе на основе анонимных файлов cookie в Pyramid с помощью Beaker

У меня есть приложение Pyramid, использующее сеансы cookie Beaker Encrypted. Я могу войти в систему с помощью RequestWithUserAttribute, pyramid.security.authenticated_userid(), запомнить () и забудь () просто отлично.

Тем не менее, большинство пользователей никогда не будут входить в систему, и есть определенное значение, которое я хотел бы сохранить в файле cookie (зашифрованном, если это вообще возможно), который пользователь дал тогда сайту (их местоположение или любая строка в этом отношении).).

Я не могу понять, как установить для сеанса больше, чем принципал, используя функцию запомнить (), и я предпочел бы не посылать свои собственные заголовки Set-Cookie, не говоря уже о том, чтобы самому заниматься шифрованием данных.

Я обнаружил, что вы можете передать ключевые аргументы для запомнить ():

remember(request, principal, *kw)

Но когда я пытаюсь отправить какие-либо дополнительные значения, я постоянно сталкиваюсь с ошибкой.

В идеале я бы ожидал что-то вроде этого:

remember(request, 'public', {'location':request.params.get('location')})

Это даже правильный маршрут?

1 ответ

Решение

Сессии и аутентификация в пирамиде (и вообще) являются непересекающимися понятиями. Есть много людей, которые изучают способ хранения аутентифицированного пользователя "в сеансе", но это никоим образом не является обязательным требованием. Смысл сеанса заключается в хранении произвольных данных для посетителя на вашем сайте через запросы. Это может быть тот факт, что они вошли в систему, или это могут быть ваши случайные строки.

Дело в том, что вы можете хранить случайные вещи в сессии. Он доступен в Pyramid (после настройки session_factory в Конфигураторе) непосредственно в объекте запроса через request.session,

request.session['mykey'] = 'some random value'

Это не требует от вас использования аутентификации, запоминания / забытия или чего-либо другого, кроме фабрики сеансов.

https://docs.pylonsproject.org/projects/pyramid/en/1.2-branch/narr/sessions.html

Другие вопросы по тегам