我在学习这个教程:Finally, Real-Time Django Is Here: Get Started with Django Channels。
我想使用Django用户对象而不是handle
变量来扩展应用程序。但是如何在我的ws_recieve(message)
函数中从收到的WebSocket包中获取当前用户?
我注意到web socket包中的csrftoken
和sessionid
的前十位数字都匹配一个正常的HTTP请求。我可以用这些信息获取当前用户吗?
作为参考,收到的数据包如下所示:
{'channel': <channels.channel.Channel object at 0x110ea3a20>,
'channel_layer': <channels.asgi.ChannelLayerWrapper object at 0x110c399e8>,
'channel_session': <django.contrib.sessions.backends.db.SessionStore object at 0x110d52cc0>,
'content': {'client': ['127.0.0.1', 52472],
'headers': [[b'connection', b'Upgrade'],
[b'origin', b'http://0.0.0.0:8000'],
[b'cookie',
b'csrftoken=EQLI0lx4SGCpyTWTJrT9UTe1mZV5cbNPpevmVu'
b'STjySlk9ZJvxzHj9XFsJPgWCWq; sessionid=kgi57butc3'
b'zckszpuqphn0egqh22wqaj'],
[b'cache-control', b'no-cache'],
[b'sec-websocket-version', b'13'],
[b'sec-websocket-extensions',
b'x-webkit-deflate-frame'],
[b'host', b'0.0.0.0:8000'],
[b'upgrade', b'websocket'],
[b'sec-websocket-key', b'y2Lmb+Ej+lMYN+BVrSXpXQ=='],
[b'user-agent',
b'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) '
b'AppleWebKit/602.1.50 (KHTML, like Gecko) Version'
b'/10.0 Safari/602.1.50'],
[b'pragma', b'no-cache']],
'order': 0,
'path': '/chat-message/',
'query_string': '',
'reply_channel': 'websocket.send!UZaOWhupBefN',
'server': ['127.0.0.1', 8000]},
'reply_channel': <channels.channel.Channel object at 0x110ea3a90>}
注意:这个问题是特定于
Channels 1.x
和Django
会话系统的,如果您是以Channels 2.x
的方式来这里的,请从下面的链接中阅读文档,他们非常清楚如何做到这一点,Channels 1.x
文档让一些人(包括我)感到困惑,这就是为什么要提出这个问题和其他问题,Channels 2.x
文档是清楚地说明如何实现这一点:https://channels.readthedocs.io/en/latest/topics/authentication.html#django-authentication
频道1.x:
通过更改
consumers.py
中的装饰符以匹配文档,您可以访问user
和http_session
属性:因此示例中的^{} 文件应该变成以下内容:
注意装饰器的变化
另外,我建议你不要在这个例子上做任何事情
有关详细信息,请参见:https://channels.readthedocs.io/en/1.x/getting-started.html#authentication
2018年更新答案via the docs:
相关问题 更多 >
编程相关推荐