2011/09/29

RailsでFacebook認証

Gemfileに書きを追記

gem 'oauth'
gem 'facebook_oauth'
gem 'oauth2', '0.4.1'

なぜかoauthは0.4.1以上だと上手く行かなかったのでversionを指定します。あとは各種コントローラーを作ります。もちろん事前にデベロッパー登録はをしておいてCONSUMER_KEYなどは適宜取得したものに変更します。

app/controllers/users_controller.rb
class UsersController < ApplicationController

  CALLBACK_URL    = "http://localhost:3000/users/callback"
  CONSUMER_KEY    = "アプリID"
  CONSUMER_SECRET = "アプリの秘訣"

  def index
  end

  def oauth
    client = FacebookOAuth::Client.new(
      :application_id     => CONSUMER_KEY,
      :application_secret => CONSUMER_SECRET,
      :callback           => CALLBACK_URL
    )
    redirect_to client.authorize_url
  end

  def callback
    @client = FacebookOAuth::Client.new(
      :application_id     => CONSUMER_KEY,
      :application_secret => CONSUMER_SECRET,
      :callback           => CALLBACK_URL
    )
    @client.authorize(:code => params[:code])
  end
  
end
app/views/users/index.html.erb
<%= link_to 'OAuth認証', '/users/oauth' %>
app/views/users/callback.html.erb
<%= @client.me.info %>

http://localhost:3000/usersにアクセスすれば認証ページヘ行きます。

CakePHPでPaginatorの指定

コントローラーでは下記の通り
$this->paginate=array(
    'conditions' => array(検索条件),
    'fields' => array(取得するカラム),
    'page' => int(最初に表示するページ),
    'limit' => int(デフォルトは20),
    'sort' => string(ソートkey),
    'direction' => string(asc or desc)
    'recursive' => findAllに与える
 );
ビューではこんな感じ
  ' ',
 'after'=>' ',
 'modulus'=>3,
 'first'=>'',
 'last'=>'',
 'separator'=>'|',
 'class'=>'paging_inner'
 );
 echo $paginator->first('最初',array('after'=>' ','class'=>'paging_inner' )).
 $paginator->prev('<< '.__('前', true), array('class'=>'paging_inner' ), '最初',
 array('class'=>'disabled' )).
 $paginator->numbers($options).
 $paginator->next(__('次', true).' >>', array('class'=>'paging_inner' ), '最後',
 array('class'=>'disabled' )).
 $paginator->last('最後',array('before'=>' ','class'=>'paging_inner' ) );
 ?>

will_paginateのオプション

rails3に移行してkaminariを使っている人も多かも知れませんがwill_pagenateで各種パラメーターを変更する方法。

@@pagination_options = {
:class => 'pagination',
:prev_label => '&laquo; Previous',#前ページリンクの文言
:next_label => 'Next &raquo;',#次ページリンクの文言
:inner_window => 4,#現在ページと「...」の間のリンク数
:outer_window => 1,#「...」とnext_labelの間のリンク数
:separator => ' ', # リンク間の区切り文字
:param_name => :page, #ページ数のパラメーター名
:params => nil, #遷移先URLに付加するパラメーター
:renderer => 'WillPaginate::LinkRenderer',
:page_links => true,
:container => true
}
変更したい所でオーバーライドしてあげればOK

RubyでTwitter認証を使うと便利なtwitter-auth

twitter-authを使うと認証関連を全て受けおってくれます。

% script/generate twitter_auth

を実行するとconfig/twitter_auth.ymlが生成されるのでoauth_consumer_keyやoauth_consumer_secretやcallbackURLを記載します。loginとlogoutのパスは自動で生成されるのでそこにアクセスすると認証されるようになっています。

https://github.com/mbleigh/twitter-auth