Do Facebook không dùng FBML mới, tôi đang tìm một cách mới để tạo tab "tiết lộ" (tab trang hiển thị một phiên bản cho người hâm mộ và người khác không phải người hâm mộ) . Facebook đã bổ sung dữ liệu vào signed_request:Giải mã yêu cầu đã ký của Facebook trong Ruby/Sinatra
Khi người dùng chọn ứng dụng của bạn trong menu bên trái, ứng dụng sẽ nhận tham số signed_request với một tham số bổ sung, trang, một mảng JSON chứa 'id' của Trang Facebook của bạn Tab của bạn được lưu trữ bên trong, một boolean ('thích') cho biết người dùng có thích trang hay không, và boolean ('quản trị') cho biết có hay không người dùng là một 'quản trị viên' của Trang cùng với thông tin người dùng mảng.
Tôi có thể đọc tiền phạt đã đăng ký, nhưng sau đó tôi cần xử lý bằng cách giải mã base64url để nhận JSON chính xác. Ngoài ra, tôi đã tìm thấy trong nghiên cứu của tôi rằng JSON được định dạng không chính xác cho Ruby nên cần sửa đổi trước khi giải mã nó. Đây là mã hiện tại (Tôi chỉ đang in yêu cầu đã ký trong index.erb bây giờ):
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
Tôi đang cố gắng giữ ứng dụng càng nhẹ càng tốt và tránh sử dụng thư viện Facebook đầy đủ như thế này không phải là một ứng dụng đầy đủ (chỉ là một tab) và sẽ không yêu cầu bất kỳ quyền bổ sung nào từ người dùng. Bất kỳ khuyến nghị nào về phương pháp phát hiện người hâm mộ cũng được chào đón.
Điều này có vẻ chặt chẽ, nhưng không chính xác. Bạn chỉ muốn nhấn 1 hoặc 2 ký tự, không bao giờ bằng 3 hoặc 4. ví dụ: nếu payload.module (4) là số không, sau đó không pad. http://en.wikipedia.org/wiki/Base64 –
Lưu ý: Việc đệm với bốn '=' có vẻ bị ngắt nếu bạn sử dụng strict_decode64 hoặc urlsafe_decode64, nhưng được dung thứ bằng decode64. –