2011-03-22

twitterやfacebookのOAuthをつかってrails+omniauthでログイン機能を実装するメモ その1

OAuthをつかっていろんなサービスと連動したアプリケーションがつくりたくなったので調査。
railsでやるにはoauth_pluginとかwarden_oauthとか色々なプラグインがあるみたいだけど、omniauthがよさそうです。
rails初心者なので基本的にはomniauthのチュートリアルビデオに沿って作業します。
- https://github.com/intridea/omniauth
- http://railscasts.com/episodes/235-omniauth-part-1

自前でパスワードやメールアドレスは保持せずに、twitterやfacebookのアカウントを使ってログインできるようにするのが目標です。
ちなみにtwitter anywhereを使えば似たようなことはできそうですが、twitterに依存してしまうので今回はパス。

--

インストール

とりあえず以下を追記。nifty-generators, twitterはお好みで。deviseは後半で使います

gem 'devise'
gem 'omniauth'
gem 'nifty-generators', :group => :development
gem 'twitter'

設定

omniauth.rb作成

config/initializers/omniauth.rbを作成

Rails.application.config.middleware.use OmniAuth::Builder do
  privider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'
end

ここでセットするoauthアプリケーションは、twitter側で正しくcallback urlを設定しておく必要があります。
通常は http://yourhost.com/auth/twitter/callback のようなURLです。
そうしておかないと、twitterにリダイレクトされる前で 401 unauthorized となってはじかれます。

controller

ここではnifty generatorをつかいます

rails g nifty:scaffold authentication user_id:integer provider:string uid:string index create destroy

できたAuthenticationsControllerのcreateを以下のように書き換えます。

class AuthenticationsController < ApplicationController

def create
  render :text => request.env['omniauth.auth'].to_yaml
end

request.env['omniauth.auth']の部分は過去のバージョンではrequest.env['rack.auth']なので、うまくいかない場合はバージョンを確認してください。

routes.rb

callback用に以下を追記します

match '/auth/:provider/callback' => 'authentications#create'

ここまでやって http://localhost:3000/auth/twitter にアクセスしてtwitterで認証すると、yamlで認証情報が取得できているのが確認できます。

まとめ

以上でとりあえずOAuthでユーザ情報やcredentialをとることができました。
次回( http://taksatou.blogspot.com/2011/03/twitterfacebookoauthrailsomniauth.html )後半でtwitterでログインするところをつくります。

その他

  • rails 3.0.3, ruby 1.8.7 を使用

0 件のコメント:

コメントを投稿

ZenBackWidget