トップ  

まちゅダイアリー


2012-05-09 (水)

Rack 環境で OmniAuth 1.0 を使う

一年前にOmniAuthを使ったときはバージョン0.3だったけど、いつの間にかバージョン1.0が出ていたので久しぶりに使ってみた。1.0になって以前のバージョンとは非互換がある。詳しくは公式サイトを参照。

各々の Strategy が別 gem に分離

本体をシンプルに保つためにも、これは良いことだと思う。たとえば Twitter 認証を使いたければ Gemfile にこう書く。

gem 'omniauth'
gem 'omniauth-twitter'

取得できるハッシュの形式が変わった

user_infouser になったり、ハッシュの形式が変わっている。

使ってみた

README.mdを参考にしつつ、素のRackで書いてみた。 config.ru はこれ。

require './hello.rb'
require 'rack/static'
require 'omniauth'
require 'omniauth-twitter'

use Rack::Session::Cookie
use OmniAuth::Builder do
        provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET]'
end

 # map "/" do
 # run HelloApp.new
 # end

map "/public" do
        run Rack::File.new("public/")
end

run HelloApp.new

わかったこと。

  • / にアクセスすると HelloApp が呼ばれる(認証なし)
  • /public にアクセスすると Rack::File が呼ばれる(認証なし)
  • /auth/twitter にアクセスすると Twitter で認証し、 /auth/twitter/callback が呼ばれる

このように OmniAuth は認証してくれるけど、アクセス制御はやってくれない。特定のディレクトリにアクセス制御をするためには、自分で /auth/twitter へのリダイレクトを書く必要がある。

それから、 map "/" を有効にすると /auth/twitter で OmniAuth が呼ばれなくなったので、こちらももうちょっと工夫が必要かな。

参考

追記

それから、 map "/" を有効にすると /auth/twitter で OmniAuth が呼ばれなくなったので、こちらももうちょっと工夫が必要かな。

解決。単に use と map の位置関係の問題だった。

map を先に書いて use を後に書くと、 use で指定したミドルウェアが反映されない。

map "/" do
  run HelloApp.new
end

use Rack::Session::Cookie
use OmniAuth::Builder do
  provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET]'
end

use を先に書けば、ちゃんと /auth/:provider へのリクエストを OmniAuth が処理してくれた。

use Rack::Session::Cookie
use OmniAuth::Builder do
  provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET]'
end

map "/" do
  run HelloApp.new
end

2012-05-07 (月)

iPad で電子書籍

先日(というか発売日に)新しい iPad を買ったので、遅ればせながらいくつかの書籍を iPad で読んでる。

WEB+DB PRESS 総集編

前も書いたけど…と思ったけど書いてなかった、 WEB+DB PRESS 総集編は鉄板。フォーマットはPDF。読み返したい号だけ DropBox 経由で iPad に転送している。最初は iBook で読もうとしたけど、ページ読み込みのあまりの遅さに挫折。今はi文庫HDを使っている。画面サイズ的にはiPodで読むのにちょうど良い。

引っ越しでバックナンバーを捨てちゃったけど、こうやってiPadだけで読めるのはいいね。最新号もPDFで買えるようになれば定期購読するのに(勝手も本棚に置けないので)。

esr オープンソース三部作

たださんがesrオープンソース三部作EPUB/Mobi版を公開してくれた。i文庫HDがEPUBに対応していなかったので、Kinoppyを使って読んでいる。あのブックカバーが不思議な感じ。EPUBだとPDFと違ってページ内の文字の大きさを変更できるのがいい。

アジャイルサムライ

ずっと気になっていた アジャイルサムライオーム社のサイトでPDF版を買えると知って即購入。これもi文庫HD。

小惑星探査機はやぶさの大冒険

再ダウンロード期間の制限が無くなった紀伊国屋のBookWebで試しに買ってみたんだけど、これは失敗。本文はともかく、図の解像度が粗くて読めなかった。他の書籍もこのレベルなんだろうか。

個人的には有償でいいのでもっと読みたいんだけど、まだまだインフラはこれからか。

Tags: iPad Life

2012-05-06 (日)

GitHubのpull requestがコンフリクトしたとき

pull requestした後に、不幸にもmasterが更新されてコンフリクトしたときの対応。
忘れてしまいそうなのでメモ。

最新の変更への追従とコンフリクト解消

ローカルリポジトリのmasterブランチを最新版に追従。

$ git checkout master
$ git pull tdiary master

pull request済みのブランチを念のためにバックアップ。

$ git checkout html_anchor_on_rack
$ git branch html_anchor_on_rack2

最新版のmasterにリベース。

$git rebase master

コンフリクトしていたらaddしてrebase --continue。git commitは不要。

git add config.ru
git rebase --continue

これでmasterの更新に追従できた。念のためにログを確認。

$ git log

GitHubへのpull requestを修正済みのパッチに差し替え

GitHub上のリモートブランチをいったん削除。

$ git push origin :html_anchor_on_rack

リベースしたリモートブランチをpush。

$ git push origin html_anchor_on_rack

pull requestしたパッチは、自動的にrebase後の内容に置き換えられる。

あわせて読みたい

Tags: git github