2

プッシャーを使用してDjangoで認証がどのように機能するかについて少し混乱しています。1対1のチャットシステムを実装したいので、チャンネルを購読する前に認証が必要なプライベートチャンネルを使用していると思います... iエンドポイントがプッシャーに POST させたい URLであることを読んでください。動作しているかどうかをテストするために URL を追加しましたが、ステータスが 403 を返すたびに、テスト用に作成したビューに入っていないようです。 ? ここに私のコードのサンプルがあります:

message.html

var channel = pusher.subscribe('private-test');
channel.bind('message', function(data) {
  var $message = $('<div class="message"/>').appendTo('#messages');
  $('<span class="user"/>').text(data.user).appendTo($message);
  $('<span/>').text(data.message).appendTo($message);
});;

Pusher.channel_auth_endpoint = 'test/'; 
Pusher.channel_auth_transport = 'ajax';

channel.bind('pusher:subscription_succeeded', function(status) {
    alert(status);
});

channel.bind('pusher:subscription_error', function(status) {
    alert(status);
});

Views.py:

def testUser(request,user_name):
print 'Test Passed'
return render_to_response('message.html', {
    'PUSHER_KEY': settings.PUSHER_KEY,'channel_variable':request.user.id,'other_var':'3', 
}, RequestContext(request)) 

POST先のURLをチェックすると、cmdで正しいことがわかり、urls.pyに入れたものと一致しましたが、なぜビューに入らないのかまだわかりません

4

1 に答える 1

1

Django はわかりませんが、フレームワークがCSRF (クロス サイト リソース フォージェリ)を防ぐために呼び出しをインターセプトしている可能性が高いようです。

Django のドキュメントでは、ここで CSRF について説明しています: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

多くのフレームワークと同様に、認証エンドポイントへの XHR/AJAX 呼び出しの一部として CSRF トークンを提供するか、フレームワークの傍受を (何らかの方法で) オーバーライドする必要があります。

Pusherコンストラクタオプション パラメータの auth セクションを見てください。そこには、CSRF トークンを渡す方法の例があります。

于 2012-08-21T20:00:42.357 に答える