2

Django を使用して実装した Web アプリ (ゲーム) があります。通常の django ビューは CSRF トークンで問題なく動作しますが、コンピューター プレイヤーがサーバーと通信できるようにしたいと考えています。私は websockets (django-socketio) を使用しているため、コンピューター プレーヤーは SocketIOServer に接続する必要がありますが、socket.io プロトコルの最初の要求は投稿であり、django は CSRF 検証の失敗で応答します。ブラウザなしで CSRF Coo​​kie セットを取得するにはどうすればよいですか? (または、コンピューター プレーヤーの CSRF 検証をバイパスするだけですが、それは少し安全ではないようです。)

コンピューター プレーヤーをサーバーに接続するために使用しようとしているコードは、次のようになります。

def connect(self, host, port):
    conn  = httplib.HTTPConnection(host + ':' + str(port))
    conn.request('POST','/socket.io/1/')
    resp  = conn.getresponse()
    resp_text = resp.read()
    print resp_text
    hskey = resp_text.split(':')[0]
    websocket.enableTrace(True)
    url = 'ws://' + host + ':' + str(port) + '/socket.io/1/'
    ws = websocket.WebSocketApp(url + 'websocket/' + hskey,
            on_message=self.on_message,
            on_close=self.on_close)
    ws.on_open = self.on_open
    try:
        ws.run_forever()
    except KeyboardInterrupt:
        ws.close()

投稿リクエストを送信する前に、CSRF トークンを取得する必要があります。それを行う方法はありますか?

4

1 に答える 1

1

CSRF保護はcsrf_exempt、デコレータを介して無効にすることができます。次の例を確認してください。

from django.views.decorators.csrf import csrf_exempt, csrf_protect

@csrf_exempt
def my_view(request):
    # you code here

詳細については、公式のdjangoドキュメントをご覧ください。

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-protection-should-be-disabled-for-just-a-few-views

于 2012-07-31T23:47:45.477 に答える