mirror of
https://github.com/django/daphne.git
synced 2025-07-11 00:12:18 +03:00
Fixed #221: WebSocket class based consumer now has http user support
This commit is contained in:
parent
9cebff05ab
commit
2e5826418b
|
@ -1,6 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from ..channel import Group
|
from ..channel import Group
|
||||||
|
from ..auth import channel_session_user_from_http
|
||||||
from ..sessions import enforce_ordering
|
from ..sessions import enforce_ordering
|
||||||
from .base import BaseConsumer
|
from .base import BaseConsumer
|
||||||
|
|
||||||
|
@ -18,6 +19,10 @@ class WebsocketConsumer(BaseConsumer):
|
||||||
"websocket.disconnect": "raw_disconnect",
|
"websocket.disconnect": "raw_disconnect",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Turning this on passes the user over from the HTTP session on connect,
|
||||||
|
# implies channel_session_user
|
||||||
|
http_user = False
|
||||||
|
|
||||||
# Set one to True if you want the class to enforce ordering for you
|
# Set one to True if you want the class to enforce ordering for you
|
||||||
slight_ordering = False
|
slight_ordering = False
|
||||||
strict_ordering = False
|
strict_ordering = False
|
||||||
|
@ -27,8 +32,16 @@ class WebsocketConsumer(BaseConsumer):
|
||||||
Pulls out the path onto an instance variable, and optionally
|
Pulls out the path onto an instance variable, and optionally
|
||||||
adds the ordering decorator.
|
adds the ordering decorator.
|
||||||
"""
|
"""
|
||||||
|
# HTTP user implies channel session user
|
||||||
|
if self.http_user:
|
||||||
|
self.channel_session_user = True
|
||||||
|
# Get super-handler
|
||||||
self.path = message['path']
|
self.path = message['path']
|
||||||
handler = super(WebsocketConsumer, self).get_handler(message, **kwargs)
|
handler = super(WebsocketConsumer, self).get_handler(message, **kwargs)
|
||||||
|
# Optionally apply HTTP transfer
|
||||||
|
if self.http_user:
|
||||||
|
handler = channel_session_user_from_http(handler)
|
||||||
|
# Ordering decorators
|
||||||
if self.strict_ordering:
|
if self.strict_ordering:
|
||||||
return enforce_ordering(handler, slight=False)
|
return enforce_ordering(handler, slight=False)
|
||||||
elif self.slight_ordering:
|
elif self.slight_ordering:
|
||||||
|
|
|
@ -84,6 +84,10 @@ The basic WebSocket generic consumer is used like this::
|
||||||
|
|
||||||
class MyConsumer(WebsocketConsumer):
|
class MyConsumer(WebsocketConsumer):
|
||||||
|
|
||||||
|
# Set to True to automatically port users from HTTP cookies
|
||||||
|
# (you don't need channel_session_user, this implies it)
|
||||||
|
http_user = True
|
||||||
|
|
||||||
# Set to True if you want them, else leave out
|
# Set to True if you want them, else leave out
|
||||||
strict_ordering = False
|
strict_ordering = False
|
||||||
slight_ordering = False
|
slight_ordering = False
|
||||||
|
|
Loading…
Reference in New Issue
Block a user