【发布时间】:2018-07-05 09:04:12
【问题描述】:
不幸的是,我正在使用 django-channels 频道 1.1.8,因为我错过了所有 频道 2.0 的更新。现在升级是不现实的,因为我们刚刚 启动,这需要一些时间才能正确计算出来。
这是我的问题:
我使用 *message.user.id * 来区分经过身份验证的 我需要向其发送消息的用户。但是,在某些情况下,我会 还需要向未经身份验证的用户发送消息 - 以及该消息 取决于外部 API 调用。我在 ws_connect() 中做到了这一点:
@channel_session_user_from_http
def ws_connect(message):
# create group for user
if str(message.user) == "AnonymousUser":
user_group = "AnonymousUser" + str(uuid.uuid4())
else:
user_group = str(message.user.id)
print(f"user group is {user_group}")
Group(user_group).add(message.reply_channel)
Group(user_group).send({"accept": True})
message.channel_session['get_user'] = user_group
这只是问题的第一部分,基本上我是在随机附加一个 每个 AnonymousUser 实例的字符串。但是我找不到访问方法 此字符串来自请求对象中的一个视图,以便确定谁 我正在发送消息到。
这甚至可以实现吗?现在我无法访问任何设置 我认为的 ws_connect。
编辑:按照 kagronick 的建议,我尝试了这个:
@channel_session_user_from_http
def ws_connect(message):
# create group for user
if str(message.user) == "AnonymousUser":
user_group = "AnonymousUser" + str(uuid.uuid4())
else:
user_group = str(message.user.id)
Group(user_group).add(message.reply_channel)
Group(user_group).send({"accept": True})
message.channel_session['get_user'] = user_group
message.http_session['get_user'] = user_group
print(message.http_session['get_user'])
message.http_session.save()
但是,当用户是 AnonymousUser 时,http_session 是 None。其他装饰者没有帮助。
【问题讨论】: