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'
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ó? –
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 đó. –