从金字塔中的cookie获取用户名信息(Python)

从金字塔中的cookie获取用户名信息(Python),python,authentication,cookies,pyramid,Python,Authentication,Cookies,Pyramid,我正在编写一个金字塔应用程序,允许在数据库表中注册任意数量的用户。这是我的登录代码: @view_config(route_name='login', renderer='templates/login.jinja2') def login(request): username = request.params.get('username', '') error = '' if request.method == 'POST': error = 'Logi

我正在编写一个金字塔应用程序,允许在数据库表中注册任意数量的用户。这是我的登录代码:

@view_config(route_name='login', renderer='templates/login.jinja2')
def login(request):
    username = request.params.get('username', '')
    error = ''
    if request.method == 'POST':
        error = 'Login Failed'
        authenticated = False
        try:
            authenticated = do_login(request)
        except ValueError as e:
            error = str(e)
        if authenticated:
            headers = remember(request, username)
            return HTTPFound(request.route_url('home'), headers=headers)
    return {'error': error, 'username': username}
在哪里

我希望在对给定用户进行身份验证后,在所有视图上显示用户名。我的理解是身份验证信息存储在cookie中,cookie看起来像(auth_tkt=“”)。如何从这个cookie中获取“当前”用户名


还是我比我意识到的更困惑?

您可以通过调用
请求.authenticated\u userid
来获取经过身份验证的用户名。您可以在中找到更多关于此的信息

我还倾向于将整个
user
对象(和
dbsession
)存储在
请求中,如下所示:

def includeme(config):
    from .models.user import User

    settings = config.get_settings()
    dbsession_factory = get_dbsession_factory(settings)
    config.add_request_method(
        lambda request: dbsession_factory(),
        'dbsession',
        reify=True)
    config.add_request_method(
        lambda request: User.get_by_username(
            request.dbsession,
            request.authenticated_userid),
        'user',
        reify=True)

def get_dbsession_factory(settings):
    engine = engine_from_config(settings, 'sqlalchemy.')
    dbsession_factory = sessionmaker()
    register(dbsession_factory)
    dbsession_factory.configure(bind=engine)
    return dbsession_factory 

然后你只需在你的应用程序中调用
config.include('your_app.models')
,我知道如果出现psycopg2.error,我会发出错误消息。这只是一个输入错误。我能够使折旧后的金字塔。安全。已验证的用户ID(请求)返回我所要的。但是,较新的pyramid.request.request.authenticated_userid返回一个我不知道如何处理的“属性对象”。我想我可能调用它是错误的(但它是一个属性而不是一个方法,所以我并没有确切地调用它)。你能用pyramid.request.request.authenticated\u用户ID给我看一段代码吗?
def includeme(config):
    from .models.user import User

    settings = config.get_settings()
    dbsession_factory = get_dbsession_factory(settings)
    config.add_request_method(
        lambda request: dbsession_factory(),
        'dbsession',
        reify=True)
    config.add_request_method(
        lambda request: User.get_by_username(
            request.dbsession,
            request.authenticated_userid),
        'user',
        reify=True)

def get_dbsession_factory(settings):
    engine = engine_from_config(settings, 'sqlalchemy.')
    dbsession_factory = sessionmaker()
    register(dbsession_factory)
    dbsession_factory.configure(bind=engine)
    return dbsession_factory