我正在處理的網站需要使用登錄所需的中間件登錄每個頁面。強制Django頻道Websocket身份驗證
我試圖與渠道增加的WebSockets的雙向通信客戶端Web瀏覽器的通知。
Daphne作爲接口服務器運行,manage.py runworker運行worker。
我有一個在當連接已開通運行consumers.py文件工作的功能。
的問題是,這種連接可以打開,而且功能通過任何Web瀏覽器上運行,而不登錄。
我如何可以強制登錄的連接才能打開?
我正在處理的網站需要使用登錄所需的中間件登錄每個頁面。強制Django頻道Websocket身份驗證
我試圖與渠道增加的WebSockets的雙向通信客戶端Web瀏覽器的通知。
Daphne作爲接口服務器運行,manage.py runworker運行worker。
我有一個在當連接已開通運行consumers.py文件工作的功能。
的問題是,這種連接可以打開,而且功能通過任何Web瀏覽器上運行,而不登錄。
我如何可以強制登錄的連接才能打開?
可以使用@channel_session_user_from_http
爲"websocket.connect"
,@channel_session_user
爲"websocket.receive"
。
您可以從http session獲得message.user
。
http://channels.readthedocs.io/en/stable/getting-started.html#authentication
如果您希望用戶登錄該頁面,您可以使用裝飾器login_required作爲您的視圖。 首先需要導入
from django.contrib.auth.decorators import login_required
和意見,那麼你可以使用它,例如與其他常規裝飾: -
@login_required
def my_view(request):
...
這是什麼會做的是它可以確保用戶在他能夠查看頁面之前登錄。
這將帶他到登錄頁面,如果你已經實現了你的認證後端和他登錄後,然後重定向到頁面視圖。如果他已經登錄,則允許他直接訪問該頁面。
看到一個"channels_api"庫,他們正在做一項偉大的工作。
我使用的是需要登錄middeware截獲到該網站的所有請求。 – JohnBoy
您是否在中間件中指定了settings.LOGIN_URL –
是的,並且在沒有登錄的情況下對所有URL的任何請求都會重定向到/ login模板。 – JohnBoy