Skip to main content
 首页 » 编程设计

python之在 Django 中使用推送器对用户进行身份验证

2025年05月04日25sky-heaven

我对使用推送器在 Django 中的身份验证如何工作感到有点困惑 我想实现一对一聊天系统,所以我想我将使用需要身份验证才能订阅 channel 的私有(private) channel 。 .. 我读了there端点是您希望推送器发布到的 url,我添加了一个 url 来测试它是否有效,但每次状态返回 403 并且它似乎没有进入我创建的用于测试它的 View 所以有什么想法吗?这是我的代码示例:

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))  

当我检查它发布到的 url 时,在我的 cmd 中我发现它是正确的并且它与我在 urls.py 中输入的相匹配但我仍然不知道为什么它没有进入我的 View

请您参考如下方法:

我不了解 Django,但框架很有可能正在拦截调用以防止 CSRF (Cross site resource forgery) .

Django 文档在这里讨论 CSRF: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

与许多框架一样,您需要提供一个 CSRF token 作为对 authentication endpoint 的 XHR/AJAX 调用的一部分。 ,或覆盖框架拦截(以某种方式)。

查看 Pusher 构造函数的 auth 部分 options parameter .在那里您会找到一个如何传递 CSRF token 的示例。