Question

Dans Pyramid, en utilisant Beaker pour les séances, comment puis-je le faire pour que certaines réponses n'incluent pas les cookies?

Actuellement, si je recroqueville une URL sur mon application, je reviendrai quelque chose comme:

HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Thu, 07 Nov 2013 02:14:45 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 776
Connection: keep-alive
Set-Cookie: beaker.session.id=0a6d945c09884ca29d73bc4ff4d09ff0; expires=Thu, 07-Nov-2013 03:14:45 GMT; httponly; Path=/; secure

Je n'ai pas besoin que ce cookie soit défini avec toutes les demandes. Par exemple, je voudrais le supprimer des demandes qui ont le sous-domaine "API". J'ai essayé de changer:

def main(global_config, **settings):
    session_factory = session_factory_from_settings(settings)
    config = Configurator(settings=settings, root_factory=get_root)
    config.set_session_factory(session_factory)
    return config.make_wsgi_app()

à:

def main(global_config, **settings):
    session_factory = session_factory_from_settings(settings)
    config = Configurator(settings=settings, root_factory=get_root)
    #config.set_session_factory(session_factory)
    return MethodOverride(config, session_factory)

class MethodOverride(object):

    def __init__(self, config, session_factory):
        import copy
        self.config = copy.deepcopy(config)
        config.set_session_factory(session_factory)
        self.application = config.make_wsgi_app()

    def __call__(self, environ, start_response):
        if "api" == environ['HTTP_HOST'].split('.')[0]:
            self.application = self.config.make_wsgi_app()

Ce que je pensais faire en sorte que l'usine de session ne soit pas définie dans ces cas et donc pas de cookies. Je ne comprends pas assez bien ce qui se passe avec le middleware. Je serais également d'accord pour trouver un moyen de le faire pour que les objets de réponse qui ont un mimetype "application / json" n'incluent pas ce cookie. Toute aide serait très appréciée.

Était-ce utile?

La solution

One way you could do this is by using an NewResponse subscriber that would modify the outgoing response.

For example:

def new_response_subscriber(event):
    request = event.request
    response = event.response

    if "api" == request.environ['HTTP_HOST'].split('.')[0]:
        if 'Set-Cookie' in response.headers:
            del response.headers['Set-Cookie']

This would be one way to remove all cookies from all responses. Another way to do it would be to create a new session factory that checks to see if the current URL is an API request, and if so, it doesn't create a session at all.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top