ウェブサービスを作っています。

Devise + OmniAuth で Facebook ログインしているユーザのウォールに自動で投稿する

Gemfile は、以下の通りです。koala gem は、Facebook を処理するライブラリです。

gem 'devise', '2.1.2'
gem 'omniauth-facebook', '1.4.1'
gem 'koala', '1.6.0'


config/initializers/devise.rb の facebook 設定に、scope オプションを追加します。
ウォールへの投稿時、publish_stream という権限が必要なためです。

config.omniauth :facebook, 'APP_ID', 'APP_SECRET', scope: 'email,publish_stream'


あとは、以下のコードをコントローラに書けば、投稿できます。(投稿権限をユーザが許可している場合)

oauth = Koala::Facebook::OAuth.new(*Devise.omniauth_configs[:facebook].args)
graph = Koala::Facebook::API.new(oauth.get_app_access_token)
begin
  graph.put_connections current_user.uid, 'feed', message: 'メッセージ', link: 'http://example.com/'
rescue Koala::Facebook::ClientError
  # ignore permission errors
end