読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

『第23回 Rails勉強会@東北』に参加してきました

Rails Ruby


参加人数5名

(Ruby1.9.3, Rails3.2.6)

雑談

省略

Rails3 レシピ 183 『OmniAuth でユーザ認証の仕組みを作る』P438

Facebook の認証のみ

Facebook デベロッパーサイトでアプリの登録する

Facebook のアカウント取得しとく

  1. Facebook
  2. 『+新しいアプリを作成』ボタン
  3. "App Name" に名前を入力して『続行』
Facebook 基本設定に登録する
  • アプリ > アプリを編集 > 基本設定

『Website with Facebook Login』のサイトURLに下記を入力

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 %>
:
確認
$ rake db:migrate
$ rails s
メモ

ログインすると『#_=_』になるのはなぜか

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 にポスト。

参加者の皆さんお疲れ様でした。
とりあえずブログに書いたので任務完了。