如何从 websocket 请求中查找用户?
How to find user from websocket request?
在 django channels 2.1.2 中,我们可以通过以下方式获取经过身份验证的登录用户:
class ChatConsumer(AsyncConsumer):
async def websocket_connect(self,event):
logged_in_user = self.scope['user']
当从 channels.generic.websockets
继承 WebsocketConsumer 时,如何在渠道 1.1.8 的情况下找到登录用户
class ChatConsumer(WebsocketConsumer):
def connect(self, message, **kwargs):
logged_in_user = ?
好的,在阅读了 django 频道文档后,我得到了 answer.Here 是文档 https://channels.readthedocs.io/en/1.x/generics.html#sessions-and-users
的 link
会话和用户
如果您希望将 channel_session 或 channel_session_user 与基于 class 的消费者一起使用,只需在 class 正文中设置其中一个变量:
class MyConsumer(WebsocketConsumer):
channel_session_user = True
这将 运行 围绕您的处理程序方法的适当装饰器,并在消息对象上提供 message.channel_session 和 message.user - 两者都作为参数传递给您的处理程序以及 self.message,因为它们指向同一个实例。
如果您只想使用 django 会话中的用户,请添加 http_user:
class MyConsumer(WebsocketConsumer):
http_user = True
这将为您提供 message.user,这与 request.user 在常规视图中的效果相同。
如果您想同时使用 django 会话中的用户和会话,请添加 http_user_and_session:
class MyConsumer(WebsocketConsumer):
http_user_and_session = True
这会给你 message.user 和 message.http_session。
因此在这种情况下我们可以找到登录用户为:
class ChatConsumer(WebscoketConsumer):
http_user=True
def connect(self, message, **kwargs):
logged_in_user = message.user
在 django channels 2.1.2 中,我们可以通过以下方式获取经过身份验证的登录用户:
class ChatConsumer(AsyncConsumer):
async def websocket_connect(self,event):
logged_in_user = self.scope['user']
当从 channels.generic.websockets
继承 WebsocketConsumer 时,如何在渠道 1.1.8 的情况下找到登录用户class ChatConsumer(WebsocketConsumer):
def connect(self, message, **kwargs):
logged_in_user = ?
好的,在阅读了 django 频道文档后,我得到了 answer.Here 是文档 https://channels.readthedocs.io/en/1.x/generics.html#sessions-and-users
的 link会话和用户
如果您希望将 channel_session 或 channel_session_user 与基于 class 的消费者一起使用,只需在 class 正文中设置其中一个变量:
class MyConsumer(WebsocketConsumer):
channel_session_user = True
这将 运行 围绕您的处理程序方法的适当装饰器,并在消息对象上提供 message.channel_session 和 message.user - 两者都作为参数传递给您的处理程序以及 self.message,因为它们指向同一个实例。
如果您只想使用 django 会话中的用户,请添加 http_user:
class MyConsumer(WebsocketConsumer):
http_user = True
这将为您提供 message.user,这与 request.user 在常规视图中的效果相同。
如果您想同时使用 django 会话中的用户和会话,请添加 http_user_and_session:
class MyConsumer(WebsocketConsumer):
http_user_and_session = True
这会给你 message.user 和 message.http_session。
因此在这种情况下我们可以找到登录用户为:
class ChatConsumer(WebscoketConsumer):
http_user=True
def connect(self, message, **kwargs):
logged_in_user = message.user