首页 游戏 软件 资讯 排行榜 专题
首页
手机教程
如何为 Flask 后台管理系统添加 OAuth2 认证支持

如何为 Flask 后台管理系统添加 OAuth2 认证支持

热心网友
96
转载
2025-06-07

使用oauth2可避免维护用户账号密码风险,适合flask后台系统接入google、github或自建提供商。推荐使用authlib扩展,配置客户端后实现登录流程:1. 用户点击登录按钮跳转授权页;2. 用户授权后回调指定url;3. 应用通过code获取access token;4. 使用token请求用户信息完成登录。需将用户信息映射至本地数据库并结合权限控制,如添加@admin_required装饰器限制访问。注意事项包括:设置https回调地址、处理跨域与csrf保护、安全存储token及合理处理异常。

如何为 Flask 后台管理系统添加 OAuth2 认证支持

OAuth2 是现代 Web 应用中常用的认证机制,特别适合用于后台管理系统,可以避免自己维护用户账号密码的风险。如果你正在使用 Flask 搭建后台系统,并希望接入如 Google、GitHub 或自建的 OAuth2 提供商,下面这些步骤和建议能帮你顺利实现。

使用合适的 Flask 扩展简化开发

Flask 本身没有内置 OAuth2 支持,但社区提供了几个好用的扩展来处理这个需求。最推荐的是 Flask-OAuthlib 和 Authlib。其中:

Flask-OAuthlib:功能全面,文档较老但依然可用。Authlib:更新更活跃,支持 OAuth1、OAuth2、OpenID Connect 等,推荐作为首选。

安装方式(以 Authlib 为例):

pip install authlib
登录后复制

引入后可以在 Flask 应用中创建客户端配置,比如连接 GitHub 的 OAuth2 接口:

from authlib.integrations.flask_client import OAuthoauth = OAuth(app)github = oauth.register(    name='github',    client_id='your-client-id',    client_secret='your-client-secret',    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/',)
登录后复制配置 OAuth2 登录流程

OAuth2 的登录流程通常包括以下几个步骤:

用户点击“使用 GitHub 登录”之类的按钮;跳转到 OAuth 提供方的授权页面;用户授权后,提供方回调你的应用指定 URL;你的应用通过 code 获取 access token;使用 token 请求用户信息并完成登录或注册逻辑。

在 Flask 中可以通过如下视图函数实现:

@app.route('/login/github')def login_github():    redirect_uri = url_for('authorize', _external=True)    return github.authorize_redirect(redirect_uri)@app.route('/authorize')def authorize():    token = github.authorize_access_token()    resp = github.get('user')    user_info = resp.json()    # 这里可以根据 user_info['id'] 或 email 做用户查找或创建    # 并设置 session 或 JWT 登录状态    session['user'] = user_info    return redirect('/admin')
登录后复制

需要注意:

回调地址 /authorize 必须与你在 OAuth 提供方配置的地址一致;有些平台要求 HTTPS 回调地址,本地调试时可能需要借助 ngrok;获取到的用户信息字段因平台而异,最好先打印出来看看结构。在后台系统中集成权限控制

完成 OAuth2 登录后,你还需要将用户信息与后台权限管理结合起来。常见的做法是:

将 OAuth 返回的唯一标识(如 user_info['id'])映射到本地数据库中的用户表;添加字段判断该用户是否有后台访问权限;使用 Flask 的 @login_required 或类似装饰器限制访问;可选地结合角色系统(如管理员、普通用户)做细粒度控制。

例如,你可以这样封装一个简单的权限检查:

def admin_required(f):    @wraps(f)    def decorated_function(*args, **kwargs):        user = session.get('user')        if not user or not is_admin_user(user['id']):            abort(403)        return f(*args, **kwargs)    return decorated_function@app.route('/admin')@admin_requireddef admin_dashboard():    return "欢迎进入管理后台"
登录后复制注意事项和常见问题跨域问题:如果前后端分离,要注意设置好 OAuth 回调域名和 CORS 配置;CSRF 保护:确保 OAuth 流程中有 state 参数防止 CSRF;Session 安全:使用安全的 cookie 设置(如 HttpOnly、Secure);Token 存储:生产环境建议不要把 token 存在 session 中,可以用缓存或数据库保存;错误处理:OAuth 流程中可能出现网络失败、用户取消等情况,要合理处理异常。

基本上就这些。整个过程不复杂,但有很多细节容易忽略,尤其是权限控制和用户绑定部分。只要一步步按流程来,就能顺利为 Flask 后台系统加上 OAuth2 支持。

来源:https://www.php.cn/faq/1346501.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Git钩子自动部署配置指南 Linux服务器实战教程
系统平台
Git钩子自动部署配置指南 Linux服务器实战教程

直接说结论:使用 post-receive 钩子配合 GIT_WORK_TREE 环境变量,是实现 Git 自动部署最稳定可靠的方案。至于 post-update 钩子或在裸仓库中直接执行 checkout 的方法,强烈建议避免使用——它们不仅容易失败,而且错误信息往往不明确,排查过程极其耗时。 为

热心网友
05.18
柴犬币未来两年价格能否上涨十倍突破关键阻力位
web3.0
柴犬币未来两年价格能否上涨十倍突破关键阻力位

柴犬币(SHIB)两年内有望达到0 0001美元?深度解析其路径与挑战 柴犬币(SHIB)两年内有望达到0 0001美元,多家机构预测其2026至2028年可能实现破零,核心动力来自通缩销毁机制、Shibarium网络推动及生态扩展,但面临高流通量、市场竞争和实用性验证等挑战,需结合市场环境与长期发

热心网友
05.18
Git分支管理与合并操作指南
AI资讯
Git分支管理与合并操作指南

如果你曾尝试使用Perplexity这类AI工具来学习Git分支管理,但总觉得得到的回答过于笼统、缺乏可操作的细节——例如,它可能只告诉你“使用merge合并分支”,但具体的操作步骤、遇到冲突时的处理方法却语焉不详——那么问题很可能出在你的提问方式上。AI并非真人导师,它需要更精确的指令才能输出有价

热心网友
05.17
Linux配置Git提交模板的详细步骤与实用技巧
系统平台
Linux配置Git提交模板的详细步骤与实用技巧

配置Git提交模板,本意是让每次提交信息都清晰、规范,但实际操作中,几个隐蔽的“坑”常常让这个功能形同虚设。今天,我们就来把这些坑一个个填平。 路径写错就静默失效,这是第一个大坑 配置项 commit template 对路径的敏感度超乎想象。写错一点,它不会报错,只会默默地“罢工”。结果就是你兴冲

热心网友
05.17
Linux配置Git提交规范与Commit模板设置指南
系统平台
Linux配置Git提交规范与Commit模板设置指南

配置 git commit template 来统一团队提交信息的格式,是建立 Git 工作流规范的第一步。然而,如果你认为仅靠一个模板文件就能一劳永逸,那可能陷入了一个常见的误区。实际上,这个配置的作用非常基础:它仅在你不使用 -m 参数、通过编辑器进行交互式提交时,将模板内容预填到提交信息编辑器

热心网友
05.17

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

刑事案件电子数据取证密码获取程序拟明确
业界动态
刑事案件电子数据取证密码获取程序拟明确

公安部就电子数据取证规则公开征求意见,拟将网络安全等行政案件纳入适用范围,并规范取证流程与核心概念。新规特别明确了获取密码、调取通讯内容等特殊程序,需经严格审批并保障当事人权利。配套法律文书也同步优化,以构建更规范且注重权利保障的取证体系。

热心网友
05.23
小鹏G9降价12万背后何小鹏的豪赌与挑战
业界动态
小鹏G9降价12万背后何小鹏的豪赌与挑战

理想L9和LIvis的定价策略刚掀起波澜,小鹏GX的最终价格就给出了更猛烈的回应——从近40万元的预售价直降至27万元起。用小鹏产品矩阵负责人吴安飞的话说,这叫“9系的产品,8系的价格”。 这12万元的下调,效果堪称立竿见影。发布会次日,小鹏集团港股股价一度大涨超8%。更关键的是市场订单:上市12小

热心网友
05.23
魏建军感谢于东来支援环塔拉力赛 红牛千箱胖东来厨师助阵
业界动态
魏建军感谢于东来支援环塔拉力赛 红牛千箱胖东来厨师助阵

5月21日,环塔拉力赛新疆且末赛段大营迎来了一位备受瞩目的访客——知名零售企业胖东来的创始人于东来。他专程前往长城汽车车队营地,与参赛车手及后勤团队进行了深度交流。据悉,于东来此次自驾越野之旅已历时一月,随行车队中包含多款国产越野车型。经过实地驾驶与多维度对比,他对以长城汽车为代表的国产越野车品质给

热心网友
05.23
2026年比特币官方APP下载入口及官网安全访问指南
web3.0
2026年比特币官方APP下载入口及官网安全访问指南

比特币官方入口在哪里?一个核心门户的权威指南 说起比特币,很多人第一反应是去找它的“官网”或“官方App”。但这里有个关键点需要先理清:比特币本质上是一种去中心化的全球数字货币,它不属于任何一家公司或机构,而是由一个庞大的、遍布全球的社区共同维护。因此,它并没有传统意义上由某个企业运营的“官方网站”

热心网友
05.23
蚂蚁开源万亿参数思考模型Ring-2.5-1T详解
AI资讯
蚂蚁开源万亿参数思考模型Ring-2.5-1T详解

Ring-2 5-1T是什么 在当今大模型技术激烈竞争的赛道上,追求更长的上下文处理能力和更强大的深度推理性能已成为核心焦点。近日,蚂蚁集团旗下的inclusionAI团队重磅开源了Ring-2 5-1T模型,这是一个参数规模高达万亿级别的混合线性思考大语言模型。该模型基于先进的Ling 2 5架构

热心网友
05.23