python - El cierre de sesión falla en Turbogears 2.2.2
pylons turbogears2 (1)
- Eliminar todas las cookies de su dominio. Cuando cambia su dominio, las cookies antiguas aún permanecen y podrían causar este problema.
- ¿Por qué usas tanto
beta.domain.com
como.beta.domain.com
? Si no necesita usar esta cookie en los subdominios, elimine el segundo, simplemente use.beta.domain.com
.
Si esto no ayuda, por favor adjunte el encabezado de solicitud y respuesta.
Tengo una aplicación escrita en TG 2.2.2 con autenticación predeterminada. Últimos días, tengo problemas con el inicio y el cierre de sesión. En safari, se crean dos cookies de autenticación, una como "beta.domain.com", otra ".beta.domain.com". Después de llamar / logout_handler, la cookie para el dominio "beta.domain.com" solo se elimina, pero el dominio salvaje permanece. Por lo tanto, después de volver a cargar la página, el usuario todavía está conectado. El problema está ocurriendo en localhost y en producción.
Interesante es que otras aplicaciones en la misma versión lib funcionan normalmente, así como en otros navegadores, no se usa virtualenv.
Realmente no sé dónde está el problema, por lo que incluiré cualquier archivo de configuración cuando se solicite. Al principio, se incluye app_config.
app_cfg.py
# -*- coding: utf-8 -*-
from tg.configuration import AppConfig
import cafeteria
from cafeteria import model
from cafeteria.lib import app_globals, helpers
base_config = AppConfig()
base_config.renderers = []
base_config.prefer_toscawidgets2 = True
base_config.package = cafeteria
base_config.renderers.append(''json'')
base_config.renderers.append(''mako'')
base_config.default_renderer = ''mako''
base_config.use_sqlalchemy = True
base_config.model = cafeteria.model
base_config.DBSession = cafeteria.model.DBSession
# Configure the authentication backend
# YOU MUST CHANGE THIS VALUE IN PRODUCTION TO SECURE YOUR APP
base_config.sa_auth.cookie_secret = "SOMESECRET"
base_config.auth_backend = ''sqlalchemy''
from tg.configuration.auth import TGAuthMetadata
# This tells to TurboGears how to retrieve the data for your user
class ApplicationAuthMetadata(TGAuthMetadata):
def __init__(self, sa_auth):
self.sa_auth = sa_auth
def get_user(self, identity, userid):
return self.sa_auth.dbsession.query(self.sa_auth.user_class).filter_by(user_name = userid).first()
def get_groups(self, identity, userid):
return (identity[''user''].group.name,) if identity[''user''].group_id else []
def get_permissions(self, identity, userid):
return [p.name for p in identity[''user''].group.permissions] if identity[''user''].group_id else []
base_config.sa_auth.dbsession = model.DBSession
base_config.sa_auth.user_class = model.User
# base_config.sa_auth.group_class = model.Group
# base_config.sa_auth.permission_class = model.Permission
base_config.sa_auth.translations.group_name = ''name''
base_config.sa_auth.translations.permission_name = ''name''
base_config.sa_auth.authmetadata = ApplicationAuthMetadata(base_config.sa_auth)
# base_config.sa_auth.authenticators = [(''myauth'', SomeAuthenticator()]
# base_config.sa_auth.mdproviders = [(''myprovider'', SomeMDProvider()]
base_config.sa_auth.form_plugin = None
base_config.sa_auth.charset = ''utf-8''
base_config.sa_auth.post_login_url = ''/post_login''
base_config.sa_auth.post_logout_url = ''/post_logout''