2014-12-10 15 views
18

Tôi có ứng dụng được viết bằng TG 2.2.2 với xác thực mặc định. Những ngày cuối cùng, tôi gặp sự cố khi đăng nhập và đăng xuất. Trong safari, hai cookie authtkt được tạo, một là "beta.domain.com", một ".beta.domain.com" khác. Sau khi gọi/logout_handler, cookie cho tên miền "beta.domain.com" chỉ bị xóa nhưng đối với miền hoang dã vẫn còn. Vì vậy, sau khi tải lại trang, người dùng vẫn đăng nhập. Sự cố xảy ra trên máy chủ cục bộ cũng như trong quá trình sản xuất.Đăng xuất không thành công trong Turbogears 2.2.2

Thú vị là ứng dụng khác trên cùng một phiên bản lib hoạt động bình thường, cũng như trong các trình duyệt khác, không sử dụng virtualenv.

Tôi thực sự không biết vấn đề ở đâu nên tôi sẽ bao gồm bất kỳ tệp cấu hình nào khi được yêu cầu. Lúc bắt đầu, app_config được bao gồm.

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

Tôi rất tiếc vì tôi không thấy điều này trước đó. Nếu bạn vẫn muốn được giúp đỡ, tôi sẽ rất vui khi được thử. Bạn có thể vui lòng bao gồm cả tiêu đề HTTP và nội dung cho cả yêu cầu đăng xuất và phản hồi của nó? –

+0

Ngoài ra, sẽ rất hữu ích nếu bạn có thể bao gồm đầu ra của 'pip freeze' trong môi trường (không phải ảo) mà bạn chạy nó trong đó. –

Trả lời

1
  1. Di tất cả cookie của tên miền của bạn. khi bạn thay đổi miền cũ, cookie vẫn còn và có thể gây ra sự cố này.
  2. Tại sao bạn sử dụng cả hai beta.domain.com.beta.domain.com? nếu bạn không cần sử dụng cookie này trong các tên miền phụ, hãy xóa cookie thứ hai khác chỉ cần sử dụng .beta.domain.com.

Nếu điều này không giúp vui lòng đính kèm yêu cầu và tiêu đề phản hồi.

Các vấn đề liên quan