下面两段代码是我在 ruby-china 源码中看到的。
如果没理解错的话,这里由服务器端生成一个临时的 token,保证当前用户只能订阅到分配给自己的频道,假设有恶意用户想窃听其他用户的频道,但由于他没有这个 token,是找不到那个有效频道的,这个 token 就相当于秘密电台,只有当前用户和站点之间知道。
我的问题是:在客户端的 js 中,那个App.access_token
是怎么获取的?
客户端
initNotificationSubscribe : () ->
return if not App.access_token?
faye = new Faye.Client(App.faye_client_url)
faye.subscribe "/notifications_count/#{App.access_token}", (json) ->
span = $("#user_notifications_count span")
new_title = document.title.replace(/^\(\d+\) /,'')
if json.count > 0
span.addClass("badge-error")
new_title = "(#{json.count}) #{new_title}"
url = App.fixUrlDash("#{App.root_url}#{json.content_path}")
console.log url
$.notifier.notify("",json.title,json.content,url)
else
span.removeClass("badge-error")
span.text(json.count)
document.title = new_title
true
服务器
def realtime_push_to_client
if self.user
hash = self.notify_hash
hash[:count] = self.user.notifications.unread.count
FayeClient.send("/notifications_count/#{self.user.temp_access_token}", hash)
end
end