2017-08-14 15 views
1

私は基本的にdjangoチャンネルに相当するlogin_required/LoginRequiredMixinの後です。ドキュメントにはauthentication sectionがありますが、これはユーザーの取得方法を説明していますが、認証されていないユーザーへのアクセスを実際に拒否している部分は見逃しているようです。djangoチャンネルで認証されていないユーザーへのアクセスを拒否する

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がtrueの場合、接続をドロップ/拒否すべきですか?

答えて

2

すると、このように簡単です:あなたが接続を確立したくない場合は、まったく受け入れメッセージを送信しません。設定された時間が経過すると、チャンネルは自動的に閉じます(デフォルトでは5秒かそれ以上の時間がかかります)。

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のリリースノートにのみ記載されています。

+0

チャネルを閉じたり、タイムアウトを待つ必要がありますか? – jozxyqk

+0

@jozxyqk:あなたが明示的に接続を閉じ、 'channels'がそれを閉じるのを待たずに、' {"close":True} 'を' {"accept":True} 'の代わりに送信したいのであれば、私は答えを更新します。 – hoefling

0

はちょうどこの操作を行います。接続試行の接続を拒否

if user.is_authenticated(): 
    # allow it 
+0

明確にするために、AnonymousUser.is_authenticatedは常にfalseを返しますか?私の質問は、それをどうやって禁止するかも尋ねていた。 – jozxyqk

関連する問題