簡體   English   中英

如何使用 django-hosts 子域和 DRF 登錄 API 級別

[英]How to log in on API-level with django-hosts subdomain and DRF

我正在使用django-rest-framework (DRF) 來擁有一個可瀏覽的 API,它應該在api子域下可用,例如api.localhost:8000 為了服務子域,我使用django-hosts 我無法在 API 級別(即在api子域下)實現登錄和注銷功能。

子域有效,但我無法再使用 DRF 身份驗證機制。

問題

訪問api.localhost:8000/顯示可瀏覽的 api 頁面,這很好。 DRF 登錄按鈕也可用。 使用此按鈕顯示登錄表單,但是在提交表單時,我被重定向到http://login/這當然無法解析,因此登錄失敗。 這同樣適用於注銷功能,這會導致http://logout/並且也失敗。 以下是這些步驟的屏幕截圖。

Django 設置

ROOT_URLCONF = "server.urls"
ROOT_HOSTCONF = "server.hosts"
DEFAULT_HOST = "api"

django-hosts 配置

# server/hosts.py
from django_hosts import patterns, host
from django.conf import settings

host_patterns = patterns(
    '',
    host(r"api", "server.api_urls", name="api"),
    host(r"admin", "server.admin_urls", name="admin"),
    host("", settings.ROOT_URLCONF),  # resolves to server/urls.py
)

網址配置

# server/urls.py
from django.urls import include, path

# this is my root url conf
urlpatterns = [
    path("", include("server.api_urls")),
    path("", include("rest_framework.urls", namespace='rest_framework')),
    path("", admin.site.urls),
]

我對此不滿意,但即使我在另一個子域中提供它,沒有將path("", admin.site.urls)到根 urls conf,我總是得到'admin' is not a registered namespace 出於同樣的原因,我在此處包含了rest_framework.urls ,否則名稱空間rest_framework未注冊。

# server/api_urls.py
urlpatterns = [
    path("", include('rest_framework.urls', namespace='rest_framework')),    
    path("", include("myapp.urls")),  # here is the DRF routing
]

為了使用DRF認證機制和Log in and Log out按鈕,我在之前注冊的命名空間下包含了rest_framework.urls 之后,包含通常的應用程序 url,用於路由下面屏幕截圖中顯示的users API 端點。

# server/admin_urls.py
from django.contrib import admin

urlpatterns = [
    path("", admin.site.urls),
]

截圖

訪問api.localhost:8000/顯示可瀏覽的 api 頁面。

頁面在 http://api.localhost:8000/

使用Log in按鈕重定向到http://api.localhost:8000/login/?next=/這很好。

頁面在 ttp://api.localhost:8000/login/

但是提交表單后,我被重定向到http://login/這當然無法解析,因此登錄失敗。 這同樣適用於注銷功能,這會導致http://logout/並且也失敗。

登錄失敗

如何修復身份驗證機制以在 API 級別工作?

添加 PARENT_HOST 設置。 這將使您的重定向正確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM