まちゅダイアリー
2012-05-09 (水)
■ Rack 環境で OmniAuth 1.0 を使う
一年前にOmniAuthを使ったときはバージョン0.3だったけど、いつの間にかバージョン1.0が出ていたので久しぶりに使ってみた。1.0になって以前のバージョンとは非互換がある。詳しくは公式サイトを参照。
各々の Strategy が別 gem に分離
本体をシンプルに保つためにも、これは良いことだと思う。たとえば Twitter 認証を使いたければ Gemfile にこう書く。
gem 'omniauth'
gem 'omniauth-twitter'
取得できるハッシュの形式が変わった
user_info が user になったり、ハッシュの形式が変わっている。
使ってみた
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で試しに買ってみたんだけど、これは失敗。本文はともかく、図の解像度が粗くて読めなかった。他の書籍もこのレベルなんだろうか。
個人的には有償でいいのでもっと読みたいんだけど、まだまだインフラはこれからか。
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後の内容に置き換えられる。