ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

django-allauth 接入 Untappd 登录:OAuth2 配置、回调地址与 User-Agent 设置实战

django-allauth 接入 Untappd 登录:OAuth2 配置、回调地址与 User-Agent 设置实战 后端认证鉴权身份认证【免费下载链接】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点击查看免费下载Untappd 是面向精酿啤酒爱好者与商家的社交平台其开放 API 提供了标准的 OAuth2 授权流程。django-allauth 在allauth.socialaccount.providers.untappd模块中内置了该提供者Provider的完整实现你只需完成应用注册、SocialApp 配置并正确设置USER_AGENT即可让 Django 项目获得“用 Untappd 账号登录”的能力。读完本文你将掌握 Untappd 应用在 Untappd 官方后台的注册步骤、django-allauth 中SOCIALACCOUNT_PROVIDERS与 Django Admin 的配置方法并能从源码层面理解该提供者针对 Untappd 非标准 OAuth2 行为所做的特殊适配。Untappd 提供者概览在接入之前先了解当前仓库中该提供者的代码布局。与大多数 OAuth2 提供者一样Untappd 提供者由四个核心文件组成provider.py定义UntappdProvider继承自OAuth2Provider负责用户标识uid、公共字段与邮箱的提取client.py定义UntappdOAuth2Client重写了访问令牌access token的获取逻辑views.py定义UntappdOAuth2Adapter声明授权、令牌与用户信息接口的端点urls.py通过default_urlpatterns(UntappdProvider)生成标准的/accounts/untappd/login/与/accounts/untappd/login/callback/路由。从 views.py 可以看到Untappd 提供者本质上是标准的 OAuth2 实现class UntappdOAuth2Adapter(OAuth2Adapter): client_class UntappdOAuth2Client provider_id untappd access_token_url https://untappd.com/oauth/authorize/ # nosec access_token_method GET # nosec authorize_url https://untappd.com/oauth/authenticate/ user_info_url https://api.untappd.com/v4/user/info/注意两个细节Untappd 的 access token 端点使用GET方法绝大多数 OAuth2 提供者使用 POST并且授权端点与令牌端点位于不同的路径authenticate/与authorize/。这些差异已被适配器封装接入方无需关心。在 Untappd 注册应用在 Django 中配置任何东西之前先到 Untappd 官方后台创建一个 API 应用注册入口为https://untappd.com/api/register?registernew创建应用的表单中需要填写development callback URL开发回调地址本地开发时可填写http://127.0.0.1:8000/accounts/untappd/login/callback/生产环境上线时需要把回调地址替换为你的正式域名例如http://yoursite.com/accounts/untappd/login/callback/回调地址的路径后缀固定为accounts/untappd/login/callback/它由 urls.py 中的默认 URL 模式生成与 django-allauth 其它提供者保持一致。login/callback/之前的域名部分随你的站点环境变化Untappd 侧登记的回调地址必须与实际部署域名一致否则授权回调会被拒绝。在 Django Admin 中配置 SocialApp应用创建完成后Untappd 的 API 后台dashboard会提供Client ID与Client Secret两项凭据https://untappd.com/api/dashboard接下来在 Django 管理后台Admin中添加一个 SocialApp 记录字段填写如下字段取值ProviderUntappdNameUntappdClient id取自 Untappd 后台的 “Client ID”Secret key取自 Untappd 后台的 “Client Secret”Sites选择你的站点其中 Provider 一项在 Admin 中实际显示为Untappd对应 provider.py 中定义的id untappd、name Untappd。Sites 必须正确关联只有被选中的站点域名才会在授权流程中通过request.build_absolute_uri(...)生成回调地址。覆盖 User-Agent 以符合 Untappd API 规则这是 Untappd 提供者区别于大多数提供者的关键配置点。Untappd 官方 API 要求客户端请求携带符合特定格式的 User-Agent格式为platform:app ID:version string例如django:myappid:1.0。如果使用默认的 User-Agent应用将面临额外的速率限制rate limiting风险。django-allauth 在 client.py 中明确注释“Allow custom User Agent to comply with Untappd API”并通过SOCIALACCOUNT_PROVIDERS读取该配置settings app_settings.PROVIDERS.get(UntappdProvider.id, {}) headers {User-Agent: settings.get(USER_AGENT, django-allauth)}也就是说不配置时默认值为django-allauth配置后则使用你的自定义值。请在项目的settings.py中按如下方式设置SOCIALACCOUNT_PROVIDERS { untappd: { USER_AGENT: django:myappid:1.0, } }将myappid替换为你在 Untappd 后台的应用 ID1.0替换为你的应用版本号。该USER_AGENT会被用于访问令牌请求见 client.py 中对sess.request(...)的调用从而规避 Untappd 对非规范 UA 的额外限流。源码级原理Untappd 对 OAuth2 的非常规实现Untappd 的 OAuth2 流程与 RFC 标准存在三处显著差异django-allauth 为此专门定制了客户端逻辑理解这些差异有助于你排查接入过程中的问题。1. 使用redirect_url而非redirect_uri标准 OAuth2 使用redirect_uri参数传递回调地址而 Untappd 要求使用redirect_url。这一点在 client.py 的类注释中被明确记录并在两个位置落实授权阶段provider.py 重写get_auth_params_from_request将redirect_url设置为当前请求的绝对回调地址params[redirect_url] request.build_absolute_uri( reverse(f{self.id}_callback) )令牌阶段client.py 构造请求体时同样使用redirect_url字段。2. Access token 嵌套在response对象中标准实现中令牌端点的响应体直接返回{access_token: ...}而 Untappd 会多包一层response。因此 client.py 中做了如下处理if resp.status_code HTTPStatus.OK: access_token resp.json()[response] if not access_token or access_token not in access_token: raise OAuth2Error(fError retrieving access token: {resp.content})即从resp.json()[response]中取出内层字典再检查其中是否包含access_token字段否则抛出OAuth2Error。测试用例 tests/apps/socialaccount/providers/untappd/tests.py 中的get_login_response_json精确复现了这一响应结构。3. 用户信息响应同样被response.user包裹登录完成后适配器在 views.py 中调用complete_login请求用户信息接口并把整个 JSON 交给提供者解析def complete_login(self, request, app, token, **kwargs): with get_adapter().get_requests_session() as sess: resp sess.get(self.user_info_url, params{access_token: token.token}) extra_data resp.json() return self.get_provider().sociallogin_from_response(request, extra_data)对应的字段提取逻辑都假定数据位于data[response][user]之下extract_uid 取user[uid]作为本地用户唯一标识extract_common_fields 提取user_name作为用户名拼接first_name与last_name作为显示名extract_email_addresses 从user[settings][email_address]提取邮箱并直接标记为verifiedTrue、primaryTrue——即 Untappd 返回的邮箱被视为已验证邮箱可参与SOCIALACCOUNT_EMAIL_AUTHENTICATION默认False等邮箱认证流程的判断。此外UntappdAccount账户类provider.py还提供了get_profile_url取自untappd_url与get_avatar_url取自user_avatar供模板展示用户主页链接与头像。测试用例 tests.py 中的完整 mock 响应展示了 Untappd 用户信息 JSON 的真实结构包括uid、user_name、first_name、last_name、user_avatar、untappd_url、settings.email_address等字段可作为你调试时的参考样例。验证与常见排查点接入完成后可通过以下方式验证配置是否生效启动 Django 开发服务器访问/accounts/untappd/login/发起授权跳转确认浏览器被重定向到https://untappd.com/oauth/authenticate/完成 Untappd 侧授权后回调地址应落在/accounts/untappd/login/callback/随后重定向到你的登录成功页或登录失败页在 Django Admin 的 Social accounts 列表中检查是否成功创建了 SocialAccount 记录其uid应等于 Untappd 用户 JSON 中的uid。常见问题排查回调 404 或 redirect 报错检查 Untappd 后台登记的回调域名是否与Sites中站点域名一致且路径必须以/accounts/untappd/login/callback/结尾收到额外的速率限制确认已在SOCIALACCOUNT_PROVIDERS[untappd]中设置符合platform:app ID:version string格式的USER_AGENT邮箱未入库Untappd 用户需在settings.email_address字段中公开邮箱若该字段为空extract_email_addresses会因 KeyError 抛出异常这是 Untappd API 数据本身导致的限制源码中 views.py 也留有 “TODO: get and store the email from the user info json” 的待办注释。小结Untappd 提供者的接入要点可归纳为三步在 Untappd 后台注册应用并登记回调地址、在 Django Admin 中配置 SocialAppClient ID / Client Secret / Sites、在SOCIALACCOUNT_PROVIDERS中覆盖USER_AGENT。其底层实现provider.py、client.py、views.py为 Untappd 的非常规 OAuth2 行为——redirect_url参数、GET 方式取令牌、嵌套response结构——做了完整适配接入方只需关注配置层面即可快速上线。若需了解SOCIALACCOUNT_PROVIDERS的通用配置机制可参阅 docs/socialaccount/configuration.rst 与 docs/socialaccount/provider_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 集成 Box 社交登录OAuth2 配置、回调地址与源码级实现解析django allauth 集成 Box 社交登录OAuth2 配置、回调地址与源码级实现解析 django allauth 是一套集成了认证、注册、账户管后端认证鉴权身份认证Label Studio 医疗影像目标检测标注Bounding Box 模板与区域级条件标注实战Label Studio 医疗影像目标检测标注Bounding Box 模板与区域级条件标注实战 本文以 Label Studio 官方使用场景模板「Obje后端认证鉴权身份认证django-allauth 接入 Instagram 社交登录OAuth2 应用注册与回调 URL 配置指南django allauth 接入 Instagram 社交登录OAuth2 应用注册与回调 URL 配置指南 Instagram 是 django alla后端认证鉴权身份认证上一篇终极Colyseus调试指南10个高效Debug技巧快速定位问题下一篇MangoHud文档翻译质量检查确保专业术语准确的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表