2

在 faye.ru 我有这个带有 faye_token 的代码:

require 'faye'
require File.expand_path('../config/initializers/faye_token.rb', __FILE__)

Faye::WebSocket.load_adapter('thin')

class ServerAuth
  def incoming(message, callback)
    if message['channel'] !~ %r{^/meta/}
      if message['ext']['auth_token'] != FAYE_TOKEN
        message['error'] = 'Invalid authentication token.'
      end
    end
    callback.call(message)
  end
end

faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
faye_server.add_extension(ServerAuth.new)
run faye_server

如果我在终端中运行此代码:

rackup faye_alt.ru -E production -s thin

如果我刷新本地主机网站 - 我会变成这个错误:

[ERROR] [Faye::RackAdapter] undefined method `[]' for nil:NilClass

有任何想法吗?请帮忙!

4

2 回答 2

2

消息['ext'] 为零。您可以通过以下方式检查您的 message['ext'] 是否为 nil

def incoming(message, callback)
  if message['channel'] !~ %r{^/meta/}
    if message['ext'].nil? || message['ext']['auth_token'] != FAYE_TOKEN
      message['error'] = 'Invalid authentication token'
    end
  end
callback.call(message)
end

上面的答案是错误的,您需要清除消息['ext']['auth_token'] 是清除身份验证令牌,以免泄露给客户端。

def outgoing(message, callback)
  if message['ext'] && message['ext']['auth_token']
    message['ext'] = {} 
  end
callback.call(message)
end
于 2015-05-06T09:22:56.137 回答
0

这里的 message['ext'] 为 nil,可能是因为当您订阅或 ping 到 faye 服务器时,您没有从浏览器端传递 ext auth 令牌。

你可能想调查

http://faye.jcoglan.com/browser/extensions.html

你必须做类似的东西..

outgoing: function(message, callback) {
  message.ext = message.ext || {};
  message.ext.token = your_token;
  callback(message);
}
于 2013-04-19T21:03:33.790 回答