【问题标题】:Private channels with Pusherapp (using Rails)Pusherapp 的私人频道(使用 Rails)
【发布时间】:2011-02-23 18:32:54
【问题描述】:

我刚刚收到了 Pusherapp 的 hello world。现在我想创建私人频道,以便用户只阅读他们应该阅读的消息。

Pusher 文档仅提供了有关如何执行此操作的一些详细信息,我有点迷失了。

来自docs:

... Pusher JS 库被返回 连接时的 socket_id 推动者。

当它尝试订阅一个 私人频道,它发回一个 AJAX 向您的服务器请求 channel_name 和 socket_id 为 参数。

默认网址是 http://yourserver.com/pusher/auth。 ...

class PusherController < ApplicationController
  def auth
    if current_user
      response = Pusher[params[:channel_name]].authenticate(params[:socket_id])
      render :json => response
    else
      render :text => "Not authorized", :status => '403'
    end
  end
end

给定一个唯一的用户 ID (current_user.id),我如何验证该用户然后让他/她订阅相应的频道?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby push


    【解决方案1】:

    这篇关于实现的博文似乎解释得更多:https://pusher.com/docs/client_api_guide/client_private_channels

    授权方案基于 这个想法,而不是 实现自定义用户 身份验证,并增加复杂性 并向推动者说明,我们应该相信 现有的身份验证级别 由您的应用程序提供。我们也 想确保有人阅读 从您的应用程序发送到 浏览器将无法连接 作为该用户到频道,以及 因此不能包含任何秘密 在页面 HTML 中。

    听起来您的应用程序的业务逻辑应该对用户进行身份验证并决定他们应该访问私有通道。

    他们的图表显示:

    一旦通过身份验证,应用就会请求订阅用户。 Pusher 使用 socket_id 回复。然后他们使用它连接起来。

    他们是这样描述的:

    如图所示,一个独特的 生成套接字 id 并将其发送到 Pusher 的浏览器。这是发送到 您的应用程序 (1) 通过 AJAX 请求授权用户 访问您的频道 现有的认证系统。如果 成功您的应用程序返回一个 浏览器的授权字符串 与您签署的 Pusher 秘密。这是 通过 WebSocket 发送到 Pusher, 完成授权 (2) 如果授权字符串匹配。

    博文底部的例子进一步说明:

    假设您有一个名为 project-3 的频道,用户 A 和 B 可以访问该频道,但 C 没有。您希望将此频道设为私有,以便用户 C 无法收听私有事件。只需将事件发送到 private-project-3 并在浏览器中订阅它。只要您使用最新的 javascript(1.3 或更高版本),您就会看到向 /pusher/auth 的应用程序发出 POST 请求。目前这将失败,因此不会向套接字发出订阅请求。

    所以,对我来说,这听起来像: 1) 订阅请求被发送到 Pusher 2) 向您的 /auth 方法推送 POST 以确定用户是否可以访问该频道 3)如果你的业务逻辑允许用户访问这个频道,auth方法返回“ok”响应:

    auth = Pusher[params[:channel_name]].socket_auth(params[:socket_id])
    
        content_type 'application/json'
        return JSON.generate({
          :auth => auth
        })
    

    我没有使用 Pusher 本身,但它的模型似乎反映了其他基于推送的模型的结构。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 2018-03-03
      • 1970-01-01
      • 2016-02-24
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多