0

Django Channels を使用して、ユーザー関連の websocket サービスを構築しようとしています。routing.py の最初の行にこのデマルチプレクサがあります。

def checkauth(f):
    def wrapper(*args, **kwargs):        
        if args[0].message.user.is_anonymous():
            args[0].send(stream="auth", payload = {'m':'pissoff'})
            args[0].close()
            return
        return f(*args, **kwargs)
    return wrapper


class Demultiplexer(WebsocketDemultiplexer):
    http_user = True

    mapping = {"auth": "user.tracking",}

    @checkauth
    def connect(self, message, **kwargs):

    @checkauth
    def receive(self, content, **kwargs):

だから、今私はrouting.pyで消費者を書いています:

route('user.tracking', another_app.myconsumer), 

また

route_class(another_app.MyConsumer),` 

そして、入力に message.user がありません。

channel_session_user_from_http を再度呼び出す必要がありますか? Demultiplexer にユーザーを追加する信頼できる方法はありますか?

4

2 に答える 2

0

コンシューマー関数でユーザーにアクセスする際に同様の問題があり、最終的にそれを装飾することになりました

@channel_session_user
def ws_my_consumer(message):

カスタム Demultiplexer クラスを使用してそれを行う方法が見つかりませんでした。ドキュメントでさえ、フックされたコンシューマーでデコレーターを使用することが言及されているため、別のソリューションが存在するかどうかはわかりません

于 2016-08-10T18:35:18.337 に答える