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

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

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

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

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

remember(request, principal, *kw)

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

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

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

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


person billymcclure    schedule 05.10.2011    source источник


Ответы (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

person Michael Merickel    schedule 05.10.2011
comment
Однако запрос длится только до тех пор, пока открыт браузер. Я установил значения конфигурации session.auto = True и session.timeout = 129600. Файл cookie абсолютно сохраняется, поскольку пользователи могут оставаться в системе в течение сеансов браузера, но я не могу получить какие-либо другие значения для перезагрузки. - person billymcclure; 05.10.2011
comment
Вы не сказали мне, какую политику аутентификации вы используете. Как я уже сказал, auth != Sessions. Похоже, вы используете другую политику аутентификации, в которой хранится файл cookie, и у вас нет правильно настроенных сеансов в соответствии с документацией по мензурке. - person Michael Merickel; 05.10.2011
comment
Неработающая ссылка была отредактирована, но ОП без причины отменил изменение. В случае повторного возврата рабочая ссылка будет следующей: docs. pylonsproject.org/projects/pyramid/en/latest/narr/ - person Efren; 07.02.2018
comment
Я отменил его, потому что я намеренно изменил свои ссылки, чтобы они отражали ответ в то время, когда на него был дан ответ. Затем пользователь может увидеть, изменились ли документы с тех пор. Обновление ссылки, которая со временем меняется, может легко перестать быть полезной для этого ответа. Если вы хотели обновить ссылку на ветку 1.9 после того, как убедились, что она все еще полезна, то хорошо, но переходить с постоянной ссылки на непостоянную неразумно. - person Michael Merickel; 27.02.2018
comment
Если вы посмотрите внимательно, в исходном ответе не было версии в ссылке, она просто была сломана. Непостоянные битые ссылки бесполезны. - person Efren; 28.02.2018