由於Facebook不贊成使用新的FBML,我正在尋找一種新的方式來創建「揭示」選項卡(頁面選項卡向粉絲顯示一個版本,向非粉絲顯示另一個版本) 。 Facebook已經加入數據到signed_request:解密Facebook在Ruby/Sinatra中籤名的請求
當用戶選擇在 左側菜單的應用程序,該應用程序將接收 的signed_request參數與一個 附加參數,頁面,一個JSON 數組,它包含 Facebook頁面的'id'您的標籤頁被託管在 之內,布爾('喜歡')表示 用戶是否已經喜歡 頁面,布爾('admin') 指示是否用戶是 頁面的'管理員'以及 用戶信息陣列。
我能夠讀取signed_request的罰款,但然後我需要使用base64url解碼來處理它,以獲得正確的JSON。此外,我在我的研究中發現,JSON格式不正確,因此需要在解碼之前進行修改。下面是當前的代碼(我只是在印刷的index.erb現在簽名的請求):
helpers do
def base64_url_decode str
encoded_str = str.gsub('-','+').gsub('_','/')
encoded_str += '=' while !(encoded_str.size % 4).zero?
Base64.decode64(encoded_str)
end
def decode_data str
encoded_sig, payload = str.split('.')
data = ActiveSupport::JSON.decode base64_url_decode(payload)
end
end
get '/' do
signed_request = params[:signed_request]
@signed_request = decode_data(signed_request)
erb :index
end
我試圖保持應用程序儘可能的輕,避免使用完整的Facebook庫,因爲這億韓元不是一個完整的應用程序(只是一個選項卡),不需要用戶的額外權限。我也歡迎任何關於我的粉塵檢測方法的建議。
這似乎很近,但不正確的。您只想填充1或2個字符,而不是3或4。如果payload.module(4)爲零,則不要填充。 http://en.wikipedia.org/wiki/Base64 – 2014-12-06 02:09:57
注意:如果您使用strict_decode64或urlsafe_decode64,但可以通過decode64容忍,則帶有四個'='的填充似乎會中斷。 – 2014-12-06 02:27:49