我对使用pusher的Django身份验证如何工作有点困惑我想实现一对一的聊天系统所以我想我将使用需要身份验证的私有渠道才能订阅该频道。 ..我读there,端点是你想要推送到POST的网址,我添加了一个网址来测试它是否正常工作,但每次状态返回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))
当我检查它发布的网址时,在我的cmd中我发现它是正确的,它与我放在urls.py中的那个匹配但是我仍然不知道它为什么不进入我的视图
答案 0 :(得分:1)
我不知道Django,但很可能该框架正在拦截阻止CSRF (Cross site resource forgery)的呼叫。
Django文档在这里讨论CSRF: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
与许多框架一样,您需要提供CSRF令牌作为对authentication endpoint的XHR / AJAX调用的一部分,或者覆盖框架拦截(以某种方式)。
查看Pusher
构造函数options parameter的auth部分。在那里,您将找到如何传递CSRF令牌的示例。