小编Dmy*_*yev的帖子

Starlette 会话状态清除

在处理一些 OAuth/0Auth 身份验证示例时,我在尝试清除 Starlette 会话状态(使用 starlette.middleware.sessions.SessionMiddleware)时发现了一些奇怪的行为。

在 Flask 中,以下注销时的会话清除代码工作得很好:

@app.route('/logout')
def logout():
    session.clear()
    params = {'returnTo': url_for('home', _external=True), 'client_id': AUTH0_CLIENT_ID}
    return redirect(auth0.api_base_url + '/v2/logout?' + urlencode(params))
Run Code Online (Sandbox Code Playgroud)

Starlette 中的等效项request.session.clear()无法清除会话状态,即使在注销代码运行后,我仍然可以访问所有受登录保护的页面,因为会话状态以某种方式保留!我已经注释了下面的代码 - 问题和解决方法。

async def logout(self, request):
    '''called when logout button is pressed - clear the session and redirect to root'''
    session = request.session      
    #session.clear()                # <- this doesn't achieve anything - session variables/cookies return on next request
    session.pop(PROFILE_KEY, None)  # <- popping just one of two works fine
    session.pop(JWT_PAYLOAD, None) …
Run Code Online (Sandbox Code Playgroud)

python authlib starlette

9
推荐指数
0
解决办法
1826
查看次数

标签 统计

authlib ×1

python ×1

starlette ×1