1

Ruby、Sinatra、Pusherは初めてなので、これは基本的な質問です。Pusherクライアントを認証しようとしています(iOSデモコードhttps://github.com/lukeredpath/libPusherを使用)。iOSクライアントがプレゼンスチャネルに参加しようとすると、以下のサーバーコードがエラーで失敗します。

ArgumentError - wrong number of arguments (1 for 2):
    /Users/waveocean/.rvm/gems/ruby-1.9.3-p327/gems/sinatra-1.3.3/lib/sinatra/base.rb:665:in `render'
    web.rb:13:in `auth'
    web.rb:26:in `block in <main>'
    /Users/waveocean/.rvm/gems/ruby-1.9.3-p327/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `call'

... snipped for brevity ...

コードは次のとおりです。

require 'sinatra'
require 'pusher'
require 'thin'
Thin::HTTP_STATUS_CODES[403] = "FORBIDDEN"

Pusher.app_id = 'MY-APP-ID'
Pusher.key = 'MY-KEY'
Pusher.secret = 'MY-SECRET'

def auth
  response = Pusher[params[:channel_name]].authenticate(params[:socket_id], {:user_id => 101})
  render :json => response
end

 use Rack::Auth::Basic, "Protected Area" do |username, password|
   username == 'foo' && password == 'bar'
 end

 post '/presence/auth' do
   if params[:channel_name] == 'presence-demo'
      auth
   else
   #   render :text => "Forbidden", :status => '403'
   response.status = 403
   end
 end

誰かがレンダリングの提案や正しい使用法を提供できますか?

4

1 に答える 1

2

これが私が発見したものです。renderRailsに関連付けられており、厳密にはRubyではありません。Sinatraルートに応答するには、authメソッドで次を使用します。

def auth
  response = Pusher[params[:channel_name]].authenticate(params[:socket_id], {:user_id => 101})
  [200, {"Content-Type" => "application/json"}, response.to_json]
end

実は、Pusher iOSプロジェクトのデモでは、必要な実装を含むScripts/auth_server.rbファイルが提供されています。インストール手順については、https ://github.com/lukeredpath/libPusher/wiki/Adding-libPusher-to-your-projectに記載されています。

于 2012-12-19T17:37:11.157 に答える