2014-12-10 4 views
18

У меня есть приложение, написанное в TG 2.2.2 с аутентификацией по умолчанию. В прошлые дни у меня проблема с входом и выходом. В сафари создаются два файла cookie authtkt, один из которых - «beta.domain.com», другой «.beta.domain.com». После вызова/logout_handler cookie для домена «beta.domain.com» удаляется только для останков диких доменов. Таким образом, после перезагрузки страницы пользователь все еще регистрируется. Проблема возникает и на локальном хосте, а также на производстве.Выход из строя в Turbogears 2.2.2

Интересно, что другое приложение на той же версии lib работает нормально, а также в других браузерах, без использования виртуального.

Я действительно не знаю, где проблема, поэтому я буду включать любой файл конфигурации по запросу. При запуске включен 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' 
+0

Извините, что раньше не видел. Если вам все равно нужна помощь, я с удовольствием попробую. Не могли бы вы включить как заголовки HTTP, так и тело для запроса на выход и его ответ? –

+0

Кроме того, было бы полезно, если бы вы могли включить вывод 'pip freeze' в (не виртуальную) среду, в которой вы это запустили. –

ответ

1
  1. Удалить все куки вашего домена. при изменении вашего домена старые файлы cookie все еще остаются и могут вызвать эту проблему.
  2. Почему вы используете оба: beta.domain.com и .beta.domain.com? если вам не нужно использовать этот файл cookie в субдоменах, удалите второй, просто используйте .beta.domain.com.

Если это не поможет прикрепить заголовок запроса и ответа.

Смежные вопросы