首页/新闻资讯/正文详情

django-allauth 集成 Patreon 第三方登录:VERSION/SCOPE 配置与 OAuth2 源码实现解析

发布时间:2026/9/24 16:20:31 来源:云帆数科 栏目:资讯中心
django-allauth 集成 Patreon 第三方登录:VERSION/SCOPE 配置与 OAuth2 源码实现解析
django-allauth 集成 Patreon 第三方登录VERSION/SCOPE 配置与 OAuth2 源码实现解析【免费下载链接】django-allauthIntegrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication. Mirror of https://codeberg.org/allauth/django-allauth/项目地址: https://gitcode.com/gh_mirrors/dj/django-allauth本文是一份面向 Django 开发者的 Patreon 社交登录接入指南。文档主体来自 Patreon 提供商文档讲解在 django-allauth 中通过SOCIALACCOUNT_PROVIDERS[patreon]完成 Patreon 应用注册、API 版本v1/v2选择、权限范围SCOPE配置以及本地回调调试。读完本文你将掌握 Patreon 提供商的完整配置方法并能理解其 OAuth2 适配器在 provider.py 与 views.py 中的底层实现包括用户资料字段映射和 v2 版本下赞助层级pledge level的提取逻辑。Patreon 提供商的核心配置项在 django-allauth 中启用 Patreon 登录只需在 Django 项目的settings.py中向SOCIALACCOUNT_PROVIDERS字典添加patreon条目。官方配置如下SOCIALACCOUNT_PROVIDERS { patreon: { VERSION: v1, SCOPE: [pledges-to-me, users, my-campaign], } }两个配置项的含义与行为VERSIONPatreon API 版本取值v1或v2默认v1。从源码看该值在 constants.py 中被读取API_VERSION settings.SOCIALACCOUNT_PROVIDERS.get(patreon, {}).get(VERSION, v1)随后USE_API_V2 True if API_VERSION v2 else False。该标志决定 API 请求基础 URL 的构造API_URL fhttps://www.patreon.com/api/oauth2/{API_VERSION if USE_API_V2 else api}。也就是说v2 版本请求形如https://www.patreon.com/api/oauth2/v2/...而 v1 版本请求形如https://www.patreon.com/api/oauth2/api/...。SCOPEOAuth2 授权时向 Patreon 申请的权限范围列表。使用 API v1 时默认值为上述示例中的[pledges-to-me, users, my-campaign]使用 API v2 时默认值切换为[identity, identity[email], campaigns, campaigns.members]。该默认逻辑体现在 provider.py 的get_default_scope()方法中当USE_API_V2为真时返回 v2 范围否则返回 v1 范围。如果你在配置中显式给出SCOPE则会覆盖上述默认值若不写SCOPE则按 VERSION 自动选择。Patreon 应用注册与回调地址配置接入前需在 Patreon 开发者平台完成以下准备工作应用注册前往 Patreon 的客户端注册页面文档原文为https://www.patreon.com/portal/registration/register-clients获取 API 所需的 Client IDkey和 Client Secretsecret。API 文档Patreon 客户端文档位于https://www.patreon.com/platform/documentation/clients可用于核对各版本接口的请求/响应格式。开发环境回调 URL本地联调时将 Patreon 应用的回调地址配置为http://127.0.0.1:8000/accounts/patreon/login/callback/这个回调地址对应 django-allauth 为 Patreon 生成的默认 URL 模式。在 urls.py 中Patreon 复用default_urlpatterns(PatreonProvider)由 oauth2/urls.py 生成两条路由login/→ 触发 OAuth2 授权跳转view 名patreon_loginlogin/callback/→ 处理 Patreon 授权回调view 名patreon_callback。因此完整的登录 URL 为/accounts/patreon/login/回调 URL 为/accounts/patreon/login/callback/。在SOCIALACCOUNT_PROVIDERS之外还需要在 Django 项目的INSTALLED_APPS中加入allauth.socialaccount.providers.patreon并在 Django admin 后台的 Social Applications 中创建一条指向 Patreon 提供商的记录填入上面获取到的 Client ID 与 Client SecretKey/Secret。OAuth2 适配器端点与资料获取的源码解析Patreon 提供商继承 django-allauth 通用的 OAuth2 基类其适配器定义在 views.py 的PatreonOAuth2Adapter中access_token_url https://www.patreon.com/api/oauth2/token authorize_url https://www.patreon.com/oauth2/authorizeauthorize_url用于将未登录用户重定向到 Patreon 授权页access_token_url用于在回调阶段用授权码换取访问令牌access token。profile_url则根据 API 版本动态构造v1 版本请求current_user端点https://www.patreon.com/api/oauth2/api/current_userv2 版本请求identity端点并附加includememberships以及一组用户字段email,first_name,full_name,image_url,last_name,social_connections,thumb_url,url,vanity以便一次请求拿到资料与会员关系。complete_login()方法展示了完整的令牌使用流程携带Authorization: Bearer token请求头调用profile_url解析响应 JSON 中的data节点然后交给sociallogin_from_response()完成用户匹配与登录。值得注意的是在 API v2 模式下还会追加一次额外请求来获取赞助层级pledge levelif USE_API_V2: try: memberships extra_data[relationships][memberships] member_id memberships[data][0][id] member_url ( {}/members/{}?include currently_entitled_tiersfields%5Btier%5Dtitle ).format(API_URL, member_id) resp_member sess.get(member_url, headersheaders) resp_data resp_member.json() pledge_title resp_data[included][0][attributes][title] extra_data[pledge_level] pledge_title except (KeyError, IndexError): extra_data[pledge_level] None这段代码会从relationships.memberships.data[0].id取出用户的第一条会员记录再请求该会员当前享有的 tier 标题写入extra_data[pledge_level]如果用户没有会员关系KeyError/IndexError则安全地置为None不会中断整个登录流程。这让开发者无需额外 API 调用即可判断当前登录用户的 Patreon 赞助档位。用户资料字段映射从 extra_data 到 Django 用户登录完成后django-allauth 通过 provider.py 中的PatreonProvider将 Patreon 返回的资料映射到 Django 用户模型extract_uid(data)返回data[id]即 Patreon 用户唯一 ID作为社交账号的标识。extract_common_fields(data)从data[attributes]中提取email、full_name、first_name、last_name分别映射为email、fullname、first_name、last_name字段。PatreonAccount.get_avatar_url()读取attributes.thumb_url作为用户头像 URL方便模板中直接展示。PatreonAccount.to_str()优先使用attributes.email作为账号的字符串表示如后台列表、调试输出缺失时回退到基类实现。测试用例 tests/apps/socialaccount/providers/patreon/tests.py 中的 mock 响应与上述字段一一对应full_name: John Interwebs、email: johnexample.com、thumb_url: https://c8.patreon.com/100/123456并且get_expected_to_str()返回johnexample.com直接印证了to_str()的取数逻辑。开发者可参照该 mock 结构理解 Patreon 用户 API 的返回格式便于调试或自定义资料同步。常见问题与注意事项VERSION 切换的影响VERSION不仅改变数据端点还会改变默认 SCOPE 与字段结构。v1 的current_user与 v2 的identity返回的 JSON 结构不同v2 中用户数据始终包裹在data节点内切换版本前请核对 Patreon 客户端文档 中列出的 API 文档地址。SCOPE 权限不足v2 模式下若未申请campaigns.members权限会员/赞助层级请求可能返回空数据此时pledge_level会按容错逻辑被置为None登录本身不受影响。本地回调地址127.0.0.1:8000仅适用于本地开发部署到生产环境后需要在 Patreon 应用后台同步更新为线上域名对应的回调地址。令牌安全access_token_url通过服务器端请求换取令牌令牌仅保存在 Django 侧SocialToken模型不会暴露给浏览器端。总结通过SOCIALACCOUNT_PROVIDERS[patreon]的VERSION与SCOPE两个配置项django-allauth 即可完成对 Patreon OAuth2 的接入底层由 constants.py 决定 API 版本与基础 URL由 views.py 完成授权、取令牌与资料拉取并由 provider.py 完成用户字段映射与赞助层级暴露。开发者只需注册 Patreon 应用、配置回调地址、在 admin 中录入 Client ID/Secret即可让站点用户通过 Patreon 账号一键登录并依据extra_data[pledge_level]实现会员权益相关的业务逻辑。【免费下载链接】django-allauthIntegrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication. Mirror of https://codeberg.org/allauth/django-allauth/项目地址: https://gitcode.com/gh_mirrors/dj/django-allauth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

用 Infinite-Canvas 把散落的 Prompt 和素材收进一张无限画布
用 Infinite-Canvas 把散落的 Prompt 和素材收进一张无限画布

做 AI 绘图或者多模态创作的人,大概都经历过这种状态:Prompt 写在某个聊天窗口里,参考图存在下载文件夹,生成结果又丢在另一个目录,改了几版之后自己都记不清哪张图对应哪段提示词。想对比两个版本的差异,得… · 2026/9/24 16:20:25

【Dv2Admin】修正页面列数据接口同时多次请求
【Dv2Admin】修正页面列数据接口同时多次请求

在企业级应用的开发中,提升用户界面的性能和交互体验一直是开发者关注的重点。尤其在数据请求与反显过程中,大量的请求会给服务器带来不必要的负担,同时可能影响用户的体验。 本文通过一个典型的业务场景,探讨如何优化列表数据请求,以一次请求的方式实现高效的数据反显,… · 2026/9/24 16:20:25

palera1n 越狱工具完整指南:适用设备、操作步骤与故障恢复
palera1n 越狱工具完整指南:适用设备、操作步骤与故障恢复

palera1n 越狱工具完整指南:适用设备、操作步骤与故障恢复 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n palera1n… · 2026/9/24 16:20:12

WeChatMsg:免费开源,五分钟把微信聊天记录导出成文档,顺带生成年度报告
WeChatMsg:免费开源,五分钟把微信聊天记录导出成文档,顺带生成年度报告

WeChatMsg:免费开源,五分钟把微信聊天记录导出成文档,顺带生成年度报告 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https:… · 2026/9/24 17:04:55

RT-Thread 在先楫 HPM6P00EVK(RISC-V 双核)上的 BSP 移植与快速上手实战指南
RT-Thread 在先楫 HPM6P00EVK(RISC-V 双核)上的 BSP 移植与快速上手实战指南

操作系统嵌入式物联网嵌入式OSRTOS 【免费下载链接】rt-thread RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/ 项目地址: https://gitcode.com/gh_mirrors/rt/rt-thread 点击查看 免费下载 本篇技术… · 2026/9/24 17:04:55

【Dify】YouTube全自动内容生成与多平台分发应用
【Dify】YouTube全自动内容生成与多平台分发应用

自媒体视频内容的生产和分发,已成为内容创业与个人品牌塑造的重要途径。高效的视频自动化处理工具,能够显著提升内容制作与运营的效率。 本文聚焦于YouTube及多平台自媒体场景,介绍一个覆盖从素材导入、音频转写、语义分析、文案生成、分段整理到成品分发的全流程工作流。通… · 2026/9/24 17:04:43

Kubernetes 云原生 CI/CD 落地实践:从 DevOps 到 GitOps 的持续构建与发布指南
Kubernetes 云原生 CI/CD 落地实践:从 DevOps 到 GitOps 的持续构建与发布指南

教程云原生容器编排 【免费下载链接】kubernetes-handbook Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-handbook 点击查看 免费下载 导读 本文以 kubernetes-handbook 仓库… · 2026/9/24 17:04:31

Presto Release 0.178 版本解读:内存治理、SQL 能力扩展与 Connector 稳定性改进
Presto Release 0.178 版本解读:内存治理、SQL 能力扩展与 Connector 稳定性改进

大数据数据库后端 【免费下载链接】presto The official home of the Presto distributed SQL query engine for big data 项目地址: https://gitcode.com/gh_mirrors/pre/presto 点击查看 免费下载 本文以 Presto 官方发布说明 release-0.178.rst 为骨架&#xff… · 2026/9/24 17:04:31

handy4cj邮箱与手机号校验实战:RFC 2822标准验证背后的简单原理
handy4cj邮箱与手机号校验实战:RFC 2822标准验证背后的简单原理

handy4cj邮箱与手机号校验实战:RFC 2822标准验证背后的简单原理 【免费下载链接】handy4cj 项目地址: https://gitcode.com/Cangjie-SIG/handy4cj handy4cj 是一个基于仓颉语言的实用工具库,内置 checkEmail 邮箱校验函数(严格遵循 R… · 2026/9/24 17:04:25

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码