トップ «前の日記(2011/05/28 (土) ) 最新 次の日記(2011/05/30 (月) )» 編集 RSS feed

HsbtDiary


2011/05/29 (日) [長年日記]

[rails][ruby][omniauth] omniauth を使ってみた

rails で認証の仕組みを導入するのに omniauth を使えば良いというのはよく聞いていたんだけど実際に使ったことはないので使ってみた。色々わかったこともあって、その辺を詳しく書こうと思ったんだけど

にだいたい書いてあったので省略。

じゃあ、実際に作る時にどうすればいいのかというと以下のようなポイントを抑えるとだいたい出来ると思う。

  • ユーザーアカウントが利用する認証方法を単一にするなら User モデルとかに uid を埋め込んでしまえばいい。そしてコールバックで受け取ったrequest.env['omniauth.rack'] に入っている uid と比較して一致しているなら認証OKにする
  • 認証方法を複数にするならAuthenticationというようなモデルを User に has_many で持たせるのがよい。Authentication では provider と uid を持たせてそのペアでコールバックの prodiver と uid で検索し、Authentication が見つかった場合は紐付いている User モデルを認証OKとする。
  • 新しい認証サービスを追加する時は上の検索結果で見つからない時に create して認証済みのUserに追加してsaveすればいい
  • 認証サービスを経由してユーザーそのものを新規作成する必要がある場合はその処理をコールバックを処理するコントローラで書けば実現できる
  • current_user のようなヘルパーメソッドをApplicationController に用意すると便利、というか用意しろ。

uid と provider でどんな値が返ってくるのかがやってみないとわからないのが割とだるくて、raise して値を取り出したりしてるんだけど、こんなんでいいのかなあ。

実際にwardenからomniauthに置き換えて作ったものは

にあるので興味がある人は見て下さい。