参加人数5名
(Ruby1.9.3, Rails3.2.6)
雑談
省略
Rails3 レシピ 183 『OmniAuth でユーザ認証の仕組みを作る』P438
Facebook の認証のみ
rails new
$ rails new sampleapp --skip-bundle
Gemfile
add
gem "omniauth" gem "omniauth-facebook"
install
$ bundle install
ファイル作成
- config/initializers/omniauth.rb
Facebook 基本設定 の "consumer key", "consumer secret" をいれる
Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, "consumer key", "consumer secret" end
config/routes.rb
match "/auth/:provider/callback" => "sessions#callback" match "/logout" => "sessions#destroy", :as => :logout
model user 作成
$ rails g model user provider:string uid:string screen_name:string name:string
- app/models/users.rb
class User < ActiveRecord::Base attr_accessible :name, :provider, :screen_name, :uid def self.create_with_omniauth(auth) create! do |user| user.provider = auth["provider"] user.uid = auth["uid"] # user.name =auth["user_info"]["name"] user.name =auth["info"]["name"] # user.screen_name = auth["user_info"]["nickname"] user.screen_name = auth["info"]["nickname"] end end end
controller sessions
$ rails g controller sessions
- app/controllers/sessions_controller.rb
class SessionsController < ApplicationController def callback auth = request.env["omniauth.auth"] user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth) session[:user_id] = user.id redirect_to root_url, :notice => "login" end def destroy session[:user_id] = nil redirect_to root_url, :notice => "logout" end end
application_controller.rb
- app/controllers/sessions_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery helper_method :current_user private def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end end
root ページ作成
$ rails g controller welcome index $ rm public/index.html
- config/routes.rb
edit
root :to => 'welcome#index'
view
- app/views/layout/application.html.erb
追加
: <% if current_user %> <%= current_user.name %>さん | <%= link_to "ログアウト", logout_path %> <% else %> <%= link_to "facebookでlogin", "/auth/facebook" %> <% end %> <%= yield %> :
メモ
ログインすると『#_=_』になるのはなぜか
http://0.0.0.0:3000/#_=_
誰か調べて教えて下さい(´・ω・`)
『twitter-bootstrap-rails』をいれてみる
前記の OmniAuth のアプリにそのまま追加。
Gemfile
add
gem "twitter-bootstrap-rails"
install
$ bundle install : $ rails g bootstrap:install $ rails g bootstrap:layout application fixed
application.html.erb を上書きするかの質問に「Yes」と答えると消えるので、元をコピーしとくかなんかしてから上書きで。
※自分が勘違いして上書きしても大丈夫って言ったら、参加者全員上書。申し訳ない(´・ω・`)
twitter-bootstrap はこれだけ。
Facebook の『Graph API』 のお話
https://developers.facebook.com/
参考資料 > Tools > Graph API Explorer
- app/views/welcome/index.html.erb
<h1>Welcome#index</h1> <p>Find me in app/views/welcome/index.html.erb</p> <%= link_to "feed dialog", "https://www.facebook.com/dialog/feed?app_id=192842294177628&redirect_uri=http://0.0.0.0:3000/" %>
リンク『feed dialog』から Facebok にポスト。
記
参加者の皆さんお疲れ様でした。
とりあえずブログに書いたので任務完了。