Я следовал инструкциям CoverHound, см. Как создать фанатскую вкладку Facebook с Rails и JavaScript .
Все прошло гладко до шага 3 в разделе Служитьсодержимое для вашего приложения FB с приложением Rails При предварительном просмотре с использованием моего локального сервера я получил ошибку.Типичная проблема безопасности рельсов, просто решаемая добавлением
protect_from_forgery :except => :index
в мой FacebookController.Оттуда я был золотым, проверил его на своем сайте и работаю плавно.Теперь, чтобы добавить Gate!
Добавлен оператор if в мой файл facebook index.html.erb
<% if user_likes_page? %>
<div class="fans_tickets"></div>
<% else %>
<div class="like_tickets"></div>
<% end %>
В FacebookHelper я добавил следующее, чтобы проверить подобное и проанализироватьподписанный запрос от Facebook
def user_likes_page?
fb_request = parse_signed_request
return fb_request['page']['liked'] if fb_request && fb_request['page']
end
def parse_signed_request
if params[:signed_request].present?
sig, payload = params[:signed_request].split('.')
payload += '=' * (4 - payload.length.modulo(4))
data = Base64.decode64(payload.tr('-_','+/'))
JSON.parse( data )
end
rescue Exception => e
Rails.logger.warn "!!! Error parsing signed_request"
Rails.logger.warn e.message
end
При тестировании на моем локальном хосте, Это прекрасно работает, если мне не понравилась страница, я вижу div с информацией, говорящей, что мне нравится страница с информацией о конкурсе,когда мне понравилась страница, она показывает мне информацию о конкурсах, упомянутых в не фанатском div.Отлично!
Отправьте его на сервер Live, и я получу страницу с сообщением об ошибке.В своих Журналах я вижу это ...
2011-09-23 12:38:29 INFO -- Processing by FacebookController#index as HTML
2011-09-23 12:38:29 INFO -- Parameters: {"signed_request"=>"-IIMtqxxUICCyfCOxpsBMvApiaLgEZAkr1tQltvK_bI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTMxNjgwMzEwNywicGFnZSI6eyJpZCI6IjEzNzg2NDQ2NjMxMDQwOSIsImxpa2VkIjp0cnVlLCJhZG1pbiI6dHJ1ZX0sInVzZXIiOnsiY291bnRyeSI6ImNhIiwibG9jYWxlIjoiZW5fVVMiLCJhZ2UiOnsibWluIjoyMX19fQ"}
2011-09-23 12:38:29 WARN -- !!! Error parsing signed_request
2011-09-23 12:38:29 WARN -- undefined method `encoding' for #<String:0x7f845221da58>
2011-09-23 12:38:29 INFO -- Rendered facebook/index.html.erb within /layouts/facebook (37.4ms)
2011-09-23 12:38:29 INFO -- Completed in 77ms
2011-09-23 12:38:29 FATAL --
ActionView::Template::Error (undefined method `[]' for true:TrueClass):
1: <% if user_likes_page? %>
2: <div class="fans_flames_tickets"></div>
3: <% else %>
4: <div class="like_flames_tickets"></div>
app/helpers/facebook_helper.rb:4:in `user_likes_page?'
app/views/facebook/index.html.erb:1:in `_app_views_facebook_index_html_erb___1213205873_70103145189880_0'
app/controllers/facebook_controller.rb:6:in `index'
Я не могу понять, что может быть причиной, код, похоже, не полагается на что-либо от самого сервера ...Буду признателен за любую помощь!
о, и я не продолжил: "Как я могу получить идентификатор пользователя Facebook посетителя, просматривающего мою фан-страницу?"как мне это не нужно, это просто для подобной информации.
ОБНОВЛЕНИЕ
Разобрался сотладка ... должна была быть очевидной.Мой локальный хост реализовывал JSON с работающим Guard.Поскольку Guard работал только в моем режиме разработки, JSON был установлен при разработке.Устанавливается на производство и престиж ...
Почувствуйте себя немым, если не заметили этого раньше!Спасибо за помощь Dave & Keith