You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+Authlib实现GitHub OAuth后如何登出及撤销令牌?

使用Authlib实现GitHub OAuth2登出操作

核心要点

登出操作分两个层面,按需选择:

  • 必做:清理Flask Session:你的应用靠Session维护用户登录状态(哪怕当前代码没存,实际开发肯定要把用户信息/token存进去),清掉Session才能让应用内的登录状态失效。
  • 可选:撤销GitHub访问令牌:如果想让你的应用彻底失去访问该用户GitHub资源的权限,就调用GitHub的令牌撤销接口。

具体实现步骤

1. 基础登出:清理Session

在你的OAuth蓝图里添加登出路由:

@bp.route('/logout')
def logout():
    # 清除Session里所有用户相关数据,也可以针对性删除比如session.pop('user', None)
    session.clear()
    # 跳回登录页或者首页
    return redirect(url_for('auth.login'))

补充:现在你的authorize函数里没把用户信息或token存进Session,实际开发中记得加上,比如session['user'] = user、session['github_token'] = token,这样登出时才能清干净应用内的登录痕迹。

2. 增强登出:撤销GitHub令牌

如果需要彻底撤销令牌,先修改OAuth注册配置,加上撤销端点:

oauth.register(
    name='github',
    access_token_url='https://github.com/login/oauth/access_token',
    authorize_url='https://github.com/login/oauth/authorize',
    api_base_url='https://api.github.com/',
    revocation_endpoint='https://github.com/login/oauth/revoke',  # 新增撤销端点
    client_kwargs={'scope': 'read:user'},
)

然后更新登出路由,调用撤销方法:

@bp.route('/logout')
def logout():
    # 取出存储的GitHub令牌
    token = session.pop('github_token', None)
    if token:
        # 用Authlib自带的方法撤销令牌
        oauth.github.revoke_token(token=token)
    # 清掉Session其他数据
    session.clear()
    return redirect(url_for('auth.login'))

注意:GitHub的撤销接口要求你的应用是标准OAuth App,并且你已经在Flask配置里设置了GITHUB_CLIENT_ID和GITHUB_CLIENT_SECRET,Authlib会自动读取这些配置信息。

总结

  • 清理Session是基础操作,确保用户在你的应用内彻底登出;
  • 撤销令牌是额外的安全措施,适合需要严格权限管控的场景。

内容的提问来源于stack exchange,提问作者Kirill Stepankov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:02:05