A causa di Facebook che depreca il nuovo FBML, sto cercando un nuovo modo per creare una scheda "rivela" (una scheda della pagina che mostra una versione per i fan e un'altra per i non fan) . Facebook ha aggiunto dati al signed_request:Decodifica della richiesta firmata di Facebook in Ruby/Sinatra
Quando un utente seleziona la tua applicazione nel menu a sinistra, l'applicazione riceverà il parametro signed_request con uno parametro aggiuntivo, pagina, una matrice JSON che contiene l'ID della pagina Facebook nella scheda è ospitato all'interno di , un valore booleano ('piaciuto') che indica Pagina e un booleano ('admin') indicante se l'utente ha o meno la l'utente è un 'amministratore' della Pagina insieme alle informazioni utente array.
Sono in grado di leggere la sanzione firmata, ma devo elaborarla con la decodifica base64url per ottenere il JSON corretto. Inoltre, ho trovato nella mia ricerca che il JSON è formattato in modo improprio per Ruby, quindi deve essere modificato prima di decodificarlo. Ecco il codice corrente (sto solo la stampa della richiesta firmata in index.erb per ora):
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
Sto cercando di mantenere l'applicazione il più leggero possibile ed evitare di usare una libreria completa Facebook come questo ha vinto essere un'applicazione completa (solo una scheda) e non richiederà autorizzazioni aggiuntive da parte degli utenti. Sono gradite anche eventuali raccomandazioni sul mio metodo di rilevamento dei fan.
Questo sembra vicina, ma non corretto. Si desidera eseguire il rilievo solo con 1 o 2 caratteri, mai con 3 o 4, ad es. se payload.module (4) è zero, non eseguire il pad. http://en.wikipedia.org/wiki/Base64 –
Nota: il riempimento con quattro '=' sembra interrompersi se si utilizza strict_decode64 o urlsafe_decode64, ma è tollerato dalla decodifica64. –