repoze.what.plugins.quickstart调用流程解析

repoze.what.plugins.quickstart调用流程解析
在使用repoze.what.plugins的时候曾碰到这样的情况:
用户A已经登录,此时用户在用户A没有关闭浏览器的情况下(即session没有失效)再次登录,显示登录成功,但登录的用户还是A而不是B,究其原因,应该是cookie中的用户A的信息没有删除。怎样才能不显式调用logout url(如果调用logout会导致页面跳转)而实现清空上一用户信息的效果?为搞清楚这一问题,就有必要探究一下repoze.what.plugins.quickstart的调用次序。
repoze.what.plugins.quickstart setup_sql_auth调用repoze.what.middleware setup_auth 调用repoze.who.plugins.testutil make_middleware,make_middleware根据是否skip_authentication,决定是调用AuthenticationForgerMiddleware还是repoze.who.middleware的PluggableAuthenticationMiddleware,实际使用中调用的应该是PluggableAuthenticationMiddleware
setup_sql_auth中创建cookie
cookie = AuthTktCookiePlugin(cookie_secret, cookie_name,
                                 timeout=cookie_timeout,
                                 reissue_time=cookie_reissue_time)
然后将cookie保存在who_args['identifiers'].append(('cookie', cookie))中。
who_args从repoze.what.plugins.quickstart setup_sql_auth一直传递到repoze.who.middleware的PluggableAuthenticationMiddleware中。
在PluggableAuthenticationMiddleware中通过
iregistry, nregistry = make_registries(identifiers, authenticators,
                                               challengers, mdproviders)
self.name_registry = nregistry
environ['repoze.who.plugins'] = self.name_registry
等操作将setup_sql_auth中创建cookie保存于environ['repoze.who.plugins']['cookie']中
AuthTktCookiePlugin的定义在repoze.who.plugins.auth_tk中,AuthTktCookiePlugin有一方法定义如下:
# IIdentifier
    def forget(self, environ, identity):
        # return a set of expires Set-Cookie headers
        return self._get_cookies(environ, 'INVALID', 0)
调用该forget方法即可将相关cookie清除,从而达到清除上一用户信息的目的。
在pylons中的调用示例如下:
def change_account(self):
        # Change another account, clear the original cookie
        if request.environ['repoze.who.plugins']['cookie']:
            headers = request.environ['repoze.who.plugins']['cookie'].forget(request.environ, None)
            response.headerlist.extend(headers)
        redirect(url('/account/login'))

转载于:https://www.cnblogs.com/Jerryshome/archive/2011/04/27/2030770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值