You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF Social OAuth2访问Facebook登录URL时命名空间匹配错误问题

问题描述

实现drf social oauth2功能时,访问URL localhost:8000/auth/login/facebook/ 出现'drf' is not a registered namespace及No ReverseMatch错误;将namespace改为social后,又出现'social' is not a registered namespace错误。

用户配置代码

URLPatterns

urlpatterns = [
    path("admin/", admin.site.urls),
    path('auth/', include('drf_social_oauth2.urls', namespace='social')),
    path('api/', include("users.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Installed Apps

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",

    # rest
    "rest_framework",
    "corsheaders",
    "rest_framework_simplejwt",

    # Oauth
    "oauth2_provider",
    "social_django",
    "drf_social_oauth2",

    # apps
    "accounts",
    "inventory",
    "cart",
    "orders",
    "users",

]
解决办法

核心原因

drf_social_oauth2的内置urls已预设命名空间'drf',手动指定不一致的命名空间会导致路由反向解析失败;若不指定命名空间,Django会自动使用第三方库内置的命名空间完成匹配。

方案一:移除手动指定的namespace

修改URL配置,去掉include中的namespace参数:

urlpatterns = [
    path("admin/", admin.site.urls),
    path('auth/', include('drf_social_oauth2.urls')),
    path('api/', include("users.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

方案二:使用与库内置一致的namespace

如果必须显式指定命名空间,要和drf_social_oauth2内置的命名空间'drf'保持一致:

urlpatterns = [
    path("admin/", admin.site.urls),
    path('auth/', include('drf_social_oauth2.urls', namespace='drf')),
    path('api/', include("users.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

额外检查

  • 确保social_django和oauth2_provider已正确添加到INSTALLED_APPS(当前配置已满足)
  • 清除Django缓存,避免旧路由配置残留

内容的提问来源于stack exchange,提问作者Sins97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:05:25