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

django-allauth 集成 Kakao 登录:OAuth2 配置指南与源码解析

发布时间:2026/9/24 19:33:45 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

JavaWeb试题库管理系统课设:Servlet+JSP+JDBC完整实现与避坑指南
JavaWeb试题库管理系统课设:Servlet+JSP+JDBC完整实现与避坑指南

简介:这是一套基于JavaWeb的试题库管理系统完整项目资料,面向计算机相关专业正在准备课程设计或期末大作业的学生,以及需要项目实战练习的学习者。项目为个人大三学期期末大作业,经导师指导并认可通过,评审分98分&… · 2026/9/24 19:33:39

Windows 7原版安装四层镜像校验与驱动拓扑实战指南
Windows 7原版安装四层镜像校验与驱动拓扑实战指南

1. 为什么现在还要折腾Windows 7原版安装——不是怀旧,是刚需你点开这个标题,大概率不是为了怀旧。我见过太多真实场景:老式数控机床控制面板只认Win7 SP1的.NET Framework 3.5;医院检验科的全自动生化分析仪配套软件,… · 2026/9/24 19:33:39

CAD字体缺失乱码彻底解决:SHX/TTF安装与批量修复指南
CAD字体缺失乱码彻底解决:SHX/TTF安装与批量修复指南

打开一套施工图,标题栏里全是问号,材料表变成一排方块,数字标注还正常,可所有中文全丢了。我相信干设计、干工程对接的朋友对这一幕都不陌生。CAD字体缺失、乱码问题,从R14时代一路折腾到2026年的新版本,属… · 2026/9/24 19:33:39

CNN垃圾邮件分类实战:从.eml解析到Grad-CAM可解释性
CNN垃圾邮件分类实战:从.eml解析到Grad-CAM可解释性

简介:本资源是一套基于卷积神经网络(CNN)实现的中文垃圾邮件分类系统完整项目,面向机器学习初学者与自然语言处理实践者,解决中文文本二分类中的特征提取与模型训练问题。压缩包共14个文件,含4个核心Python… · 2026/9/24 20:05:43

IDEA源根报错排查指南:Source Root原理与修复实操
IDEA源根报错排查指南:Source Root原理与修复实操

做 Java 后端开发的人,十有八九都在 IntelliJ IDEA 里见过“源根报错”这回事。平时代码写得好好的,突然打开项目,整个src/main/java目录下面一片红,要么提示“Cannot resolve symbol”,要么编译直接失败;有… · 2026/9/24 20:05:43

IDEA源根报错全面排查与修复指南
IDEA源根报错全面排查与修复指南

有多少人在IDEA里遇到过这种场景:代码写着写着,突然项目里冒出一片红色报错,鼠标悬停一看,错误信息写着类似“源根不存在”或“源根未标记”,整个项目结构看起来还是正常的,但IDEA就是翻脸不认人&#xff0… · 2026/9/24 20:05:43

C# WinForm TCP多路转发器:单端口分发至多目标
C# WinForm TCP多路转发器:单端口分发至多目标

简介:这是一款基于C# WinForm开发的轻量级TCP多路转发工具,面向.NET桌面应用开发者及网络通信学习者,解决单端口数据需同步分发至多个后端服务(如测试环境、负载节点或日志收集端)的实际需求。工具支持监听指定端口&am… · 2026/9/24 20:05:43

工厂短视频不要当网红:以信任前置打造能接单的企业号
工厂短视频不要当网红:以信任前置打造能接单的企业号

1. 工厂做短视频,先想清楚你到底要什么1.1 工厂短视频和网红内容,本质上是两条逻辑我接触过不少做制造业的朋友,一聊到短视频,第一反应就是:要不要先找个漂亮主播?要不要学那些网红玩梗、追热点&#xff1f… · 2026/9/24 20:05:43

多智能体协作框架实战:从零搭建AI虚拟开发团队
多智能体协作框架实战:从零搭建AI虚拟开发团队

1. 这个项目到底在解决什么问题第一次看到“60人AI梦之队”这个说法,我第一反应是标题党。一个开源项目,凭什么能顶60个人的活?点进去研究了两天,又自己搭了一套跑通之后,我收回之前的判断——它确实不是噱头&#xff… · 2026/9/24 20:05:30

基于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

了解更多?预约专属演示

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

企业微信二维码