拒绝使用django频道访问未经身份验证的用户

时间:2017-08-14 02:25:59

标签: python django django-channels

我基本上在django频道的login_required / LoginRequiredMixin之后。这些文档有一个authentication section,它描述了如何获取用户,但它似乎错过了您实际拒绝未经过身份验证的用户访问的位置。

from channels.generic.websockets import JsonWebsocketConsumer

class MyConsumer(JsonWebsocketConsumer):

    channel_session_user = True

    def connection_groups(self, **kwargs):
        return ["test"]

    def connect(self, message, **kwargs):
        print message.user # AnonymousUser
        self.send({"accept": True}) # False here still accepts and sends a message

如果message.user.is_anonymous为真,我应该如何拒绝/删除连接?

2 个答案:

答案 0 :(得分:2)

拒绝连接尝试时的连接非常简单:如果您不想建立连接,请不要发送接受消息。通道将在配置的时间后自动关闭(默认为5秒或smth)。

def connect(self, message, **kwargs):
    if not message.user.is_anonymous:
        self.send({"accept": True})

如果您不想立即等待并关闭连接,请改为发送{"close": True}

def connect(self, message, **kwargs):
    if not message.user.is_anonymous:
        self.send({"accept": True})
    else:
        self.send({"close": True})

为了完整起见,这里是channels docs的解释。遗憾的是,此信息未在文档本身中列出,仅在v1.0的发行说明中列出。

答案 1 :(得分:0)

这样做:

be_friend_since = models.DateField(blank = True)