拓冰建站拓冰建站
首页 / 资讯中心 / 正文

django-allauth Headless 模式安装指南:为 SPA 与移动端应用接入认证 API

后端认证鉴权身份认证【免费下载链接】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点击查看免费下载导读allauth.headless是 django-allauth 提供的无头headless认证扩展它把登录、注册、邮箱验证、密码重置、MFA、第三方社交账号等全部能力以纯 JSON API 的形式暴露出来专为单页应用SPA与移动端 App 设计。本文以官方安装文档为主体结合仓库源码完整讲解从 pip 安装、INSTALLED_APPS与 URL 挂载、到前端回调地址配置的全过程并延伸介绍HEADLESS_ONLY、HEADLESS_CLIENTS、HEADLESS_FRONTEND_URLS等关键设置项帮助你在一套配置下同时服务浏览器端与 App 客户端。一、安装前的概念准备在动手安装之前需要先明确 headless 模式在 django-allauth 中的定位。官方文档在 docs/headless/introduction.rst 中明确指出Support for single-page and mobile applications is offered by theallauth.headlessapp. Note that you still need to have e.g. theallauth.accountapp installed for this to work, yet, you can completely disable its views usingsettings.HEADLESS_ONLY True.这三点信息非常关键allauth.headless不是一个独立的认证实现它仍然依赖allauth.account等底层应用提供完整的业务逻辑headless 只是把「表单渲染 页面跳转」替换为「JSON 请求 JSON 响应」你可以用HEADLESS_ONLY True彻底关闭服务端渲染的视图如登录页、注册页只保留必要的第三方回调端点headless 同时面向浏览器端browser client与原生 App 端app client两类客户端共用一套核心 API但 URL 前缀与令牌策略不同详见下文源码分析。二、安装 headless 扩展安装命令非常简单需要安装headless这个 extraspip install django-allauth[headless]如果后续你需要在线浏览 OpenAPI 规范HEADLESS_SERVE_SPECIFICATION功能还需要额外安装规范渲染相关的依赖pip install django-allauth[headless-spec]关于这个 extra 的用途官方配置文档 docs/headless/configuration.rst 中有说明启用HEADLESS_SERVE_SPECIFICATION后/_allauth/openapi.yaml、/_allauth/openapi.json与/_allauth/openapi.html三个端点才会生效而该能力要求安装django-allauth[headless-spec]。三、配置 INSTALLED_APPS在项目的settings.py中按如下顺序组织INSTALLED_APPSINSTALLED_APPS [ ... # Required必需 allauth, allauth.account, allauth.headless, # Optional可选按需启用 allauth.socialaccount, allauth.mfa, allauth.usersessions, ... ]必需应用说明allauthdjango-allauth 的主应用提供全局配置、工具函数与模板标签见 allauth/init.pyallauth.account账号核心应用。headless 模式下它依然承担密码、邮箱、登录会话等全部业务逻辑只是视图可以被关闭。它是 headless 的硬依赖不能省略allauth.headless本篇文章的主角提供所有 JSON API 端点。可选应用说明allauth.socialaccount第三方社交账号登录。如果你需要 OAuth/OIDC 登录必须启用。从源码 allauth/headless/urls.py 可以看到只有SOCIALACCOUNT_ENABLED为真时socialaccount命名空间下的 headless URL 才会被挂载allauth.mfa多因素认证TOTP、WebAuthn、恢复码。启用后 headless 的mfa命名空间 URL 才会注册allauth/headless/urls.pyallauth.usersessions用户会话管理。同样的启用后才会挂载对应的 headless URLallauth/headless/urls.py。这种「按需挂载」的机制意味着headless 的 URL 空间是动态构建的你启用了哪些应用API 中就出现哪些端点这与各应用在INSTALLED_APPS中的存在性一一对应。四、配置前端回调地址 HEADLESS_FRONTEND_URLSheadless 模式下认证流程中有一些环节需要跳转到你的前端应用完成。例如注册后系统会发送邮箱确认邮件邮件里的链接默认指向allauth.account的 Django 视图如果你的前端是独立的 SPA就必须把这些链接指向你自己的前端路由。官方文档给出的推荐配置如下# These are the URLs to be implemented by your single-page application. HEADLESS_FRONTEND_URLS { account_confirm_email: https://app.project.org/account/verify-email/{key}, account_reset_password_from_key: https://app.org/account/password/reset/key/{key}, account_signup: https://app.org/account/signup, }占位符与完整键说明{key}是自动填充的占位符系统会把邮箱确认密钥、密码重置密钥等动态值注入 URL你无需也不能手工替换占位符的位置可以按前端路由自由调整例如官方文档给出的变体https://app.project.org/account/email/verify-email?token{key}即把{key}作为 query 参数传递完整可用的键包括来自 docs/headless/configuration.rst键默认行为说明account_confirm_email指向allauth.account的邮箱确认视图邮箱验证链接含{key}占位符account_reset_password指向密码重置发起页无需占位符纯静态链接account_reset_password_from_key指向密码重置确认页含{key}占位符account_signup指向注册页无需占位符纯静态链接socialaccount_login_error指向社交登录错误页作为「携带next状态的握手失败」时的兜底回退地址源码侧的工作原理这个设置项在 allauth/headless/app_settings.py 中以HEADLESS_FRONTEND_URLS读取默认值为空字典{}。真正消费它的是 headless 适配器中的get_frontend_url()方法allauth/headless/adapter.py它委托给allauth.core.internal.httpkit.default_get_frontend_url完成「先查 headless 前端 URL → 回退到 account 视图 URL」的解析逻辑。这也是为什么不配置该设置时邮件链接仍能正常工作——它们只是指向了服务端渲染的 Django 页面而已。五、配置项目 URL 路由在项目的urls.py中需要同时挂载两套 URLurlpatterns [ # Even when using headless, the third-party provider endpoints are still # needed for handling e.g. the OAuth handshake. The account views # can be disabled using HEADLESS_ONLY True. path(accounts/, include(allauth.urls)), # Include the API endpoints: path(_allauth/, include(allauth.headless.urls)), ]为什么不能只挂 _allauth官方注释给出了关键原因即使完全使用 headless第三方 Provider 的回调端点如 OAuth 握手完成后的 redirect仍然来自allauth.urls。社交登录的授权码回调发生在浏览器端、由 Provider 直接重定向到你的站点这一步天然是「非 headless」的必须依赖常规视图处理。从 allauth/urls.py 的源码可以看到HEADLESS_ONLY True时allauth.urls只是跳过登录、注册、密码重置等账号视图但社交账号回调相关的provider_callback、provider_login等端点依然保留。这也印证了官方文档的表述headless-only 模式下allauth.urls仍在挂载只是其中「渲染型」视图被排除了。headless URL 的内部结构从 allauth/headless/urls.py 的源码可以看出allauth.headless.urls会按HEADLESS_CLIENTS配置动态生成两套 URL 前缀/browser/→ 浏览器客户端端点使用基于 session 的认证/app/→ App 客户端端点使用令牌认证含/app/v1/tokens/令牌刷新端点见 allauth/headless/urls.py。两套前缀之下都统一挂载v1/版本号路径并分别包含account、socialaccount、mfa、usersessions等命名空间。也就是说最终的 API 地址形如/_allauth/browser/v1/auth/login /_allauth/app/v1/auth/login /_allauth/app/v1/tokens/refresh这样的设计让浏览器端与 App 端可以共享同一套业务逻辑仅在认证机制session vs token与 URL 前缀上区分。六、HEADLESS_ONLY完全关闭服务端视图如果你的应用完全由前端承担界面渲染不希望任何「渲染型」认证页面登录页、注册页等被访问可以开启HEADLESS_ONLY True # 默认 False开启后包含allauth.urls时登录、注册、密码重置等账号视图被跳过allauth/urls.py用户会话管理相关的服务端视图同样被跳过allauth/urls.py但社交账号 Provider 的回调视图仍然保留因为 OAuth 握手必须依赖它们完成allauth/socialaccount/providers/base/views.py 中可见HEADLESS_ONLY对回调逻辑的影响分支。此外该设置还影响前端 URL 的解析在 allauth/core/internal/httpkit.py 中当HEADLESS_ONLY True且未显式配置前端 URL 时系统会回退到基于请求构造的默认 URL保证邮件中的链接依然可用。七、其他相关配置项速览围绕安装与启用官方配置文档还提供了以下设置建议在接入时一并了解全部来自 docs/headless/configuration.rst设置项默认值作用HEADLESS_ADAPTERallauth.headless.adapter.DefaultHeadlessAdapter指定适配器类可继承默认适配器并覆写行为如自定义用户序列化serialize_user、用户 data classget_user_dataclassHEADLESS_CLIENTS(app, browser)支持的客户端类型。设为(app,)可移除全部browser端点HEADLESS_FRONTEND_URLS{}前端回调地址映射见上文第四节HEADLESS_ONLYFalse是否只使用 headless、关闭服务端渲染视图HEADLESS_SERVE_SPECIFICATIONFalse是否提供 OpenAPI 规范文件/_allauth/openapi.yaml等需headless-specextraHEADLESS_SPECIFICATION_TEMPLATE_NAMEheadless/spec/redoc_cdn.html渲染 OpenAPI HTML 的模板内置 Redoc 与 Swaggerheadless/spec/swagger_cdn.html两种HEADLESS_TOKEN_STRATEGYallauth.headless.tokens.strategies.sessions.SessionTokenStrategy令牌生成与处理策略可替换为 JWT 等自定义实现关于 HEADLESS_CLIENTS 的源码印证HEADLESS_CLIENTS直接控制 URL 挂载在 allauth/headless/urls.py 中只有Client.BROWSER in app_settings.CLIENTS才会注册/browser/前缀只有Client.APP in app_settings.CLIENTS才会注册/app/前缀。因此若你的产品只有原生 App 没有网页端设置HEADLESS_CLIENTS (app,)即可让 API 面更精简、避免暴露多余的 browser 端点。关于令牌策略的说明默认的SessionTokenStrategy意味着 App 客户端默认也基于会话cookie工作。如需接入 JWTHEADLESS_TOKEN_STRATEGY指向 JWT 策略后还需配套HEADLESS_JWT_ALGORITHM、HEADLESS_JWT_PRIVATE_KEY、HEADLESS_JWT_ACCESS_TOKEN_EXPIRES_IN默认 300 秒、HEADLESS_JWT_REFRESH_TOKEN_EXPIRES_IN默认 86400 秒等设置见 allauth/headless/app_settings.py。更完整的介绍请参阅 docs/headless/token-strategies/index.rst 与 docs/headless/token-strategies/jwt-tokens.rst。八、安装完成后的验证路径安装与配置完成后可以通过以下方式快速验证确认 URL 已注册在 Django shell 中执行python manage.py show_urls需安装django-extensions或直接在浏览器访问/_allauth/browser/v1/观察路由解析情况查看 OpenAPI 规范推荐临时设置HEADLESS_SERVE_SPECIFICATION True并安装headless-specextra然后访问/_allauth/openapi.htmlRedoc 会渲染出完整的端点清单、请求/响应 schema这是理解 headless API 面最快的方式调用登录接口向/_allauth/browser/v1/auth/login发起 POST携带username/email与password观察返回的 JSON 结构可对照 docs/headless/api.rst 中的接口说明跨域联调SPA 与后端分离部署时务必阅读 docs/headless/cors.rst按需配置 CORS 相关中间件与允许来源。九、常见问题与安装排查提示ModuleNotFoundError: allauth.headless说明django-allauth版本过旧或未安装[headless]extra。请升级到包含 headless 功能的最新版本当前仓库中的allauth/headless即该模块的完整实现并重新执行pip install django-allauth[headless]社交登录回调 404请检查allauth.socialaccount是否已加入INSTALLED_APPS以及path(accounts/, include(allauth.urls))是否仍然挂载——回调端点依赖这一行启用了HEADLESS_ONLY后邮件链接打不开请检查HEADLESS_FRONTEND_URLS是否配置了对应键尤其是account_confirm_email与account_reset_password_from_key否则邮件链接会回退到已被跳过的服务端视图App 端刷新令牌接口不可用确认HEADLESS_CLIENTS中包含app/app/v1/tokens/端点仅在 App 客户端模式下注册见 allauth/headless/urls.py。十、总结django-allauth 的 headless 模式让「一套 Django 后端同时服务 Web SPA 与原生 App」成为现实。安装上只需三个步骤安装[headless]extra、把allauth.headless加入INSTALLED_APPS、在urls.py中同时挂载allauth.urls与allauth.headless.urls随后再通过HEADLESS_FRONTEND_URLS把邮件类链接指向前端路由、按需开启HEADLESS_ONLY即可完成从「服务端渲染」到「纯 API」的切换。配合HEADLESS_CLIENTS、HEADLESS_TOKEN_STRATEGY与 OpenAPI 规范自省能力你可以精确裁剪 API 面并让前端团队基于规范文档高效联调。更深入的内容——如各端点的完整请求/响应定义、适配器定制、JWT 令牌策略——可以继续阅读 docs/headless/api.rst、docs/headless/adapter.rst 与 docs/headless/configuration.rst。赞分享后端认证鉴权身份认证【免费下载链接】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-allauth 官方示例项目完全指南Regular Django 模板化与 React SPA Headless 实战django allauth 官方示例项目完全指南Regular Django 模板化与 React SPA Headless 实战 本文档以 docs/in后端认证鉴权身份认证Neon Storage Controller 架构解析Serverless Postgres 存储控制面的设计、调度与一致性保障Neon Storage Controller 架构解析Serverless Postgres 存储控制面的设计、调度与一致性保障 导读 本文基于 Neon后端认证鉴权身份认证上一篇just-the-docs文档版本控制管理多版本内容的实用技巧下一篇Japronto源码打包从sdist到wheels分发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门