2012年2月6日月曜日

rails OmniAuthを使った認証について

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
久しぶりにOmniAuthを使って認証機能を実装しようとしたら
エラーがいくつかでて少し方法が変わっていたのでメモ。
Rails3.1.3 ruby1.9.2 OS:WIN

認証はtwitter,facebook,google,mixi,openid,yahooの6つ試してみました。


基本は以下のURLの流れとは変わらなかったけど違っていた部分だけをメモ。
http://ja.asciicasts.com/episodes/241-simple-omniauth

●gemファイル
gem "omniauth",'~> 1.0.0.rc2'
gem 'omniauth-twitter'
gem 'omniauth-facebook'
gem 'omniauth-openid'


●omniauth.rbの作成部分

config/initializer/omniauth.rbを作成し以下を記述

require 'omniauth-openid'
require 'openid/store/filesystem'
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'
  provider :facebook, "App ID","App Secret", {:client_options => {:ssl => {:verify => false}}}

   # generic openid
   provider :open_id, :store => OpenID::Store::Filesystem.new('/tmp')
   provider :open_id, :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id'
   provider :open_id, :name => 'yahoo', :identifier => 'yahoo.co.jp'
   provider :open_id, :name => 'mixi', :identifier => 'mixi.jp'
end


●ログインリンク部分
    <!--login auth -->

    <div id="user_nav">
      <% if current_user %>
        Welcome, <%= current_user.name %>!    <%= link_to "Sign Out", signout_path %>
        <%= link_to "Mypage", :controller=>'articles',:action=>'mypage' %>
      <% else %>
        <%= link_to "Sign in with Twitter", "/auth/twitter" %>
        <%= link_to "Sign in with Facebook", "/auth/facebook" %>
        <%= link_to "Sign in with Google", "/auth/open_id?openid_url=https://www.google.com/accounts/o8/id" %>
        <%= link_to "Sign in with Yahoo", "/auth/open_id?openid_url=yahoo.co.jp" %>    
         <%= link_to "Sign in with Mixi", "/auth/open_id?openid_url=mixi.jp" %>
        <%= link_to "Sign in with OpenID", "/auth/open_id" %>
      <% end %>
    </div>


以上で、大体のログインがうまくいった。
ただ、OpenSSLあたりがうまくいかずfacebookはコールバックでエラーと
mixlでサーバーログにエラーがでてる。

omniauth.rbの作成部分が怪しい感じでぐぐってみて以下いろいろ試したが
うまくいってくれない。

OpenID.fetcher.ca_file = "/etc/ssl/certs/ca-certificates.crt"
 provider :facebook, "App ID","App Secret", {:client_options => {:ssl => {:ca_path =>"/etc/ssl/certs"}}}
 provider :facebook, "App ID","App Secret", {:client_options => {:ssl => {:ca_file =>"/etc/ssl/certs/cacerts.pem"}}}

とりあえず、environment.rbに以下を記述

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

facebookはエラーはなくなったが、しっくりこない。あまりよろしくないのかもしれない。

0 件のコメント:

コメントを投稿