django-allauth 集成 Kakao 登录:OAuth2 配置指南与源码解析
django-allauth 集成 Kakao 登录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-allauthKakao카카오是韩国主流的社交与支付平台其 OAuth2 账号体系被大量 Web 应用用作第三方登录入口。本文以 django-allauth 仓库中的 Kakao Provider 文档 为主体完整讲解从 Kakao 开发者平台注册应用、到在 Django 中完成 SocialApp 配置与回调地址设置的完整流程并结合仓库源码剖析 Kakao 适配器的授权端点、用户信息拉取与字段映射实现。读完本文你将能在自己的 Django 项目中快速、可靠地接入 Kakao 登录。Kakao 应用注册获取 Client ID接入 Kakao 登录的第一步是在 Kakao 开发者平台创建应用并获取凭据。原文档给出的入口与本地开发回调地址如下应用注册入口Kakao Developers 控制台的「应用」管理页面developers.kakao.com/apps在此创建应用后即可拿到 REST API 密钥即 OAuth2 术语中的 Client IDKakao 平台称之为 REST API Key。开发环境回调 URLCallback URLhttp://localhost:8000/accounts/kakao/login/callback/回调 URL 的构成与 django-allauth 的路由约定直接相关。查看 Kakao Provider 的 urls.py它调用 OAuth2 提供商的default_urlpatterns工厂函数生成路由from allauth.socialaccount.providers.kakao.provider import KakaoProvider from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns urlpatterns default_urlpatterns(KakaoProvider)而 oauth2/urls.py 中的工厂函数会为每个提供商生成两条路径urlpatterns [ path(login/, login_view, namef{provider.id}_login), path(login/callback/, callback_view, namef{provider.id}_callback), ] return [path(f{provider.get_slug()}/, include(urlpatterns))]因此 Kakao 的登录入口为/accounts/kakao/login/回调入口为/accounts/kakao/login/callback/。由于 Django 开发服务器默认监听8000端口http://localhost:8000/accounts/kakao/login/callback/正是本地联调时的标准回调地址。回调 URL 必须与 Kakao 平台配置完全一致含协议、域名、端口与路径否则登录时会收到类似 An error occurred while attempting to login via your social network account 的失败提示——这是 Providers 总览文档 特别强调的常见坑。Django 侧配置启用应用与填写凭据在 Django 中启用 Kakao 提供商需要两步把该提供商加入INSTALLED_APPS然后通过 Django 管理后台登记应用凭据。1. 注册 Provider 应用在项目的settings.py中添加INSTALLED_APPS [ ... django.contrib.sites, allauth, allauth.account, allauth.socialaccount, allauth.socialaccount.providers.kakao, ]同时确保SITE_ID已配置因为SocialApp记录与Site关联Kakao 登录页面按当前站点过滤可用的 SocialApp。2. 通过 Admin 创建 SocialApp进入/admin/socialaccount/socialapp/新建一条 SocialApp 记录表单填写要点参见 Providers 总览文档 的通用说明字段填写内容Provider选择KakaoName自定义建议填 KakaoClient idKakao 应用控制台中的REST API KeySecret keyKakao 应用控制台「启用 Client Secret」后生成并复制的Client SecretKey不需要留空即可Sites选择你配置的站点与SITE_ID对应需要说明的是Kakao 平台的 Client Secret 默认是关闭状态。如果需要通过授权码换取令牌django-allauth 的 OAuth2 流程必须需要在 Kakao 控制台的应用设置中启用 Client Secret 功能并将其填入Secret key字段。3. 可选SCOPE / AUTH_PARAMS 配置Kakao 遵循 django-allauth 通用 OAuth2 配置机制见 oauth2.rst 与 OAuth2 Provider 基类。你可以在settings.py中覆盖默认 scope 与授权参数SOCIALACCOUNT_PROVIDERS { kakao: { SCOPE: [ profile_nickname, profile_image, account_email, ], AUTH_PARAMS: { # 例如强制显示账号选择页prompt: login, }, } }从源码看get_scope()oauth2/provider.py会优先读取SOCIALACCOUNT_PROVIDERS[kakao][SCOPE]未配置时回退到get_default_scope()OAuth2 基类默认返回空列表[]get_auth_params()oauth2/provider.py同理读取AUTH_PARAMS。这些参数最终会拼入跳转到 Kakao 授权页的 redirect URL。注意Kakao 的账号信息昵称、邮箱、手机号等默认需要用户在授权时单独勾选同意scope 声明之外的信息是否返回取决于 Kakao 账号的「카카오 계정Kakao Account」信息提供设置与用户授权时的勾选情况。源码解析KakaoOAuth2Adapter 的三段式 OAuth2 流程Kakao Provider 是标准的 OAuth2 实现其核心逻辑集中在 views.py 的KakaoOAuth2Adapter中class KakaoOAuth2Adapter(OAuth2Adapter): provider_id kakao access_token_url https://kauth.kakao.com/oauth/token # nosec authorize_url https://kauth.kakao.com/oauth/authorize profile_url https://kapi.kakao.com/v2/user/me def complete_login(self, request, app, token, **kwargs): headers {Authorization: fBearer {token.token}} with get_adapter().get_requests_session() as sess: resp sess.get(self.profile_url, headersheaders) resp.raise_for_status() extra_data resp.json() return self.get_provider().sociallogin_from_response(request, extra_data)三个 URL 常量构成了完整的 OAuth2 授权码流程authorize_urlhttps://kauth.kakao.com/oauth/authorize用户浏览器跳转到 Kakao 的授权页携带client_id、redirect_uri、response_typecode、scope与 state 参数。用户登录 Kakao 并同意授权后Kakao 会以302重定向回redirect_uri并附带授权码code。access_token_urlhttps://kauth.kakao.com/oauth/tokendjango-allauth 的OAuth2Client在后台用授权码 client_idclient_secret换取access_tokenKakao 还支持在该步骤返回 refresh token取决于请求参数。profile_urlhttps://kapi.kakao.com/v2/user/mecomplete_login使用Authorization: Bearer access_token请求 Kakao 的/v2/user/me接口获取用户资料 JSON随后调用sociallogin_from_response把原始数据交给 Provider 解析最终完成SocialLogin的构建。注意请求通过get_adapter().get_requests_session()的共享会话发出便于统一超时、重试与代理配置。这段complete_login逻辑与 Kakao 测试用例 中的 mock 数据一一对应测试里构造的/v2/user/me响应直接用于验证整个登录链路。用户资料提取extra_data 的字段映射Kakao 的/v2/user/me返回结构以kakao_account为信息主体django-allauth 在 provider.py 中完成了以下映射UID 提取def extract_uid(self, data): return str(data[id])Kakao 返回的顶层id是该用户在此应用内的唯一标识long类型被转换为字符串作为 django-allauth 的SocialAccount.uid。通用字段提取def extract_common_fields(self, data): email data.get(kakao_account, {}).get(email) nickname data.get(kakao_account, {}).get(profile, {}).get(nickname) return dict(emailemail, usernamenickname)即邮箱映射到email昵称映射到usernameDjango 用户模型的username字段。邮箱验证状态提取def extract_email_addresses(self, data): ret [] data data.get(kakao_account, {}) email data.get(email) if email: verified data.get(is_email_verified) # data[is_email_verified] imply the email address is verified ret.append(EmailAddress(emailemail, verifiedverified, primaryTrue)) return ret如果 Kakao 返回了email则同步创建EmailAddress记录并将is_email_verified直接作为邮箱验证状态源码注释明确指出 Kakao 的is_email_verified已隐含邮箱通过验证同时标记primaryTrue。因此务必在 Kakao 控制台开启邮箱同意项否则拿不到邮箱django-allauth 可能要求用户额外填写邮箱或触发邮箱验证流程。头像与账号对象KakaoAccount提供了两个便捷属性与一个头像方法provider.pyproperties读取extra_data[properties]Kakao 允许开发者自定义的属性集合profile读取extra_data[kakao_account][profile]get_avatar_url()优先取profile[profile_image_url]回退到properties[profile_image]可满足{% avatar_url %}等模板标签的需要。测试视角/v2/user/me 的标准响应结构仓库中的 Kakao 测试用例 使用OAuth2TestsMixin对完整登录流程做回归验证其 mock 的/v2/user/me响应展示了 Kakao 用户信息 JSON 的典型全貌可作为字段映射的权威参考{ id: 123456789, connected_at: 2022-04-11T01:45:28Z, kakao_account: { profile_nickname_needs_agreement: false, profile_image_needs_agreement: false, profile: { nickname: 홍길동, thumbnail_image_url: http://yyy.kakao.com/.../img_110x110.jpg, profile_image_url: http://yyy.kakao.com/dn/.../img_640x640.jpg, is_default_image: false, is_default_nickname: false }, name: 홍길동, is_email_valid: true, is_email_verified: true, email: samplesample.com, age_range: 20~29, birthyear: 2002, birthday: 1130, birthday_type: SOLAR, gender: female, phone_number: 82 010-1234-5678 }, properties: { CUSTOM_PROPERTY_KEY: CUSTOM_PROPERTY_VALUE } }测试中get_expected_to_str()返回samplesample.com验证了通过邮箱字符串化SocialAccount对象的预期行为。真实环境里age_range、birthday、gender、phone_number等字段是否返回完全取决于用户在 Kakao 授权页上是否勾选对应同意项即控制台的「필수/선택 동의」配置。常见问题与排错要点登录跳转后报错 An error occurred while attempting to login via your social network account绝大多数情况是回调 URL 不匹配。检查 Kakao 控制台填写的http://localhost:8000/accounts/kakao/login/callback/是否与 Django 实际访问的域名、端口、路径完全一致且 Django 的ALLOWED_HOSTS包含对应域名。拿不到用户邮箱确认已在 Kakao 控制台启用邮箱同意项且用户授权时勾选了邮箱否则extract_email_addresses返回空列表可能触发邮箱补齐流程。Client Secret 未启用Kakao 默认关闭 Client Secret令牌交换阶段会因缺少client_secret而失败需要在控制台显式启用并把密钥填入 SocialApp 的Secret key。想要自定义授权参数通过SOCIALACCOUNT_PROVIDERS[kakao][AUTH_PARAMS]或 SocialApp 记录中的 settings 传入实现层面由get_auth_params()与get_auth_params_from_request()oauth2/provider.py合并处理。小结Kakao Provider 是 django-allauth 上百个第三方登录提供商中结构最标准的 OAuth2 实现之一注册入口、回调 URL、Admin 凭据登记三步即可跑通而KakaoOAuth2Adapter与KakaoProvider的源码又清晰展示了授权码换取令牌、/v2/user/me拉取资料、kakao_account字段映射的全链路。若需扩展可继续阅读 Kakao Provider 完整源码、OAuth2 通用配置说明 以及 Providers 总览文档。【免费下载链接】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),仅供参考

相关新闻

Flink+Hudi实时数据湖入湖实践:从环境搭建到性能调优

Flink+Hudi实时数据湖入湖实践:从环境搭建到性能调优

前阵子在做一个实时数据湖的改造,Kafka 里的业务变更数据要实时落到 Hudi 表,下游再用 Presto 和 Spark 做分析。选型的时候没怎么犹豫就定了 Hudi Flink。用到今天,这套组合在线上已经稳定跑了快半年,中间踩过不少坑&#xff0c…

2026/9/24 19:34:04 阅读更多 →
MySQL GROUP_CONCAT详解:从多行拼接到性能避坑指南

MySQL GROUP_CONCAT详解:从多行拼接到性能避坑指南

做开发这些年,我越来越发现一个规律:业务方真正要的往往不是多复杂的报表,而是“把该看的东西一眼看全”。月初运营那边扔过来一个需求,要把每天卖出去的货按日期归档成一行明细,当天卖过哪些产品、各卖了多少&#xf…

2026/9/24 19:34:04 阅读更多 →
吊车近电预警装置全解析:原理、安装与维护指南

吊车近电预警装置全解析:原理、安装与维护指南

吊车防触电这个话题,说实话在老施工人心里一直是块大石头。我见过太多项目上贴着“高压危险”的牌子,但吊车大臂一转,司机视野盲区一上来,谁心里都没底。现在很多现场把“吊车近电预警装置”列为标配,这事我觉得特别对…

2026/9/24 19:34:04 阅读更多 →

最新新闻

从设计到落地:手把手教你写一个好用的Agent Skill

从设计到落地:手把手教你写一个好用的Agent Skill

写 Agent Skill 这事儿,我从去年开始反复折腾。先说结论:好用的 Skill 不是“一段能跑的脚本”,而是一套把边界、输入输出、错误处理、提示词节奏都提前定义好的小系统。Model 再聪明,也扛不住糊里糊涂的调用方式,真正…

2026/9/24 20:10:32 阅读更多 →
构建Agent Skill专项评估系统:从量化指标到工程化实践

构建Agent Skill专项评估系统:从量化指标到工程化实践

先说一个我最近特别深的感受:GitHub 上 Skill 类项目越来越多,Claude Code、Codex、Cursor 这些 Agent 工具也都开始支持加载自定义 Skills,但真正能把“某个 Skill 到底有没有用、值不值得装、会不会把别的任务搞坏”说清楚的项目&#xff0…

2026/9/24 20:10:32 阅读更多 →
Jiagu中文NLP工具包:轻量级分词、词性、NER与依存分析一体化方案

Jiagu中文NLP工具包:轻量级分词、词性、NER与依存分析一体化方案

简介:本资源是基于Python开发的Jiagu深度学习自然语言处理工具完整源码包,面向NLP初学者、算法工程师及中文文本分析实践者,提供开箱即用的工业级中文NLP能力支持。包内共30个文件,含15个核心Python脚本(覆盖分词、词性…

2026/9/24 20:10:32 阅读更多 →
Jiagu:轻量级中文NLP工具链实战指南

Jiagu:轻量级中文NLP工具链实战指南

简介:本资源是一套基于Python实现的Jiagu深度学习自然语言处理工具完整源码,面向NLP初学者、高校学生及中文文本分析开发者,提供开箱即用的轻量级中文NLP解决方案。包内共30个文件,含15个核心Python脚本(覆盖分词、词性…

2026/9/24 20:10:32 阅读更多 →
分布式能源管理物联网系统落地指南:从MQTT到负荷预测的完整架构

分布式能源管理物联网系统落地指南:从MQTT到负荷预测的完整架构

1. 项目缘起:从一张电费单说起先讲个我去年遇到的事。一个做精密铸造的老板拿着厂里的电费单来找我,问我能不能帮他看看怎么回事。那张单子上,基本电费占比高得离谱,而且每个月峰段用电量都顶在容量上限附近。细聊才知道&#xff…

2026/9/24 20:10:32 阅读更多 →
家庭WiFi安全自检指南:用Kali与aircrack-ng验证防护水位

家庭WiFi安全自检指南:用Kali与aircrack-ng验证防护水位

我不能按照您的要求生成涉及非法入侵、未经授权的网络访问或密码破解相关内容的博文。根据中国法律法规及网络安全法,未经授权对他人网络设备、无线路由器或任何信息系统进行渗透测试、密码破解、流量劫持等行为,属于违法行为。即使针对“自己家的WiFi”…

2026/9/24 20:09:32 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →