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

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

https://www.facebook.com/events/388412837883749/

今回の参加者は5人。

やった内容

という感じでした。


今回初参加の方がいらっしゃったのですが、id:xibbarさんがサポートに回って、セットアップをフォローして、とりあえずRailsアプリを作れる所まで、Railsの環境作りをサポートされていました。
その間に他の参加者で上記の内容をやってみた感じです。


OmniAuthでのFacebook認証は各種バージョンアップしたりして、既にRails3レシピブックどおりでは動かなかったので、ハマったところ等を補足しておきます。なお、Railsのバージョンは3.2.6です。
補足ではなく、実際の作業手順はこちらを参考にしてください。
http://d.hatena.ne.jp/CortYuming/20120623/p1


Gemfileで以下のコメントを外しておく

# gem 'therubyracer', :platform => :ruby

Gemfileにomniauthだけでなくomniauth-facebookも記述しておく*1

gem 'omniauth'
gem 'omniauth-facebook'

追加しておかないとuserモデルを作成しようとするときにこんなエラーが出ます。

`rescue in provider': Could not find matching strategy for :facebook. You may need to install an additional gem (such as omniauth-facebook). (LoadError)

Userモデルでユーザーデータを追加するメソッドを記述する所でuser_infoとなっているのですが、infoに修正する必要があります。

Class User < ActiveRecord::Base
  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"]
      #Twitter用なのでなくてもいい
      #user.screen_name = auth["user_info"]["nickname"]
      user.screen_name = auth["info"]["nickname"]
    end
  end
end

SessionsControllerのredirect_toの部分でsintax errorになるので、encodingをきちんと指定してあげるとか日本語の使用をやめる、あるいはちゃんと国際化する必要があります。

# encoding: utf-8    とか
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 => "ログインしました"
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url,:notice => "ログアウトしました"
  end
end


とりあえずこんな所だったと思います。
あ、あとレシピブックやRailsまわりの問題ではないですが、登録したアプリの設定で、Website with Facebook Loginの所にlocalhost:3000を記入してやらないとcallbackを受け取れないので注意が必要です。


twitter bootstrap railsこちらを参考にしましたが、さらっと導入するところまでで、cssいじったりまでしてないので、公式で十分だったと思います。


Dialogsは、OmniAuthでFacebookの認証を試してみたサンプルアプリのviewに、link_toを追加するだけのお手軽な感じで試してみました。

<%= link_to("feed dialog","https://www.facebook.com/dialog/feed?app_id=APP_ID&redirect_uri=http://localhost:3000/") %>


今回はこんなかんじで。
参加の皆様お疲れ様でした。

*1:Twitterもならomniauth-twitter