2010年12月17日金曜日

Rails3でDeviseを2つ使ってみる

Deviseは認証系

Deviseを使うと、メールでのアクティベーションとか次回ログイン省略とか、TwitterだOpenIDらもできる?(ここまで入れるとOmniAuthになるんかな?) WardenベースのRails以外でも使える認証系ライブラリです。githubにあります。

使い方とかはgithubにあるwikiやrailscastsやREADMEを翻訳してくれてるサイトにまかせて、今回はあまりやらないであろうマイナーチャレンジとして、deviseを2回使ってみましたw

ユーザと管理者を別モデルにしたいじゃんというお話

rails g devise MODEL でいくつも作れるので特にdeviseの最初から書かれてあるオプション通りであれば問題はないのですが、どれかだけ認証の方法をメール+パスワードから別のものに変えたいという場合や、複数のdeviseでログイン成功後のリダイレクトの先を変えたいというニーズはあって普通と思うし、後者はwikiに書かれてました。前者はあるのか知らないけど、MLで質問したら教えてもらったのでせっかくですのでブログに残しておきます。(前置き長い)

UserモデルとAdminモデルで認証方法を変える

やり方は簡単で

  • 認証方法を変えたいモデルでクラスマクロdeviseで:authentication_keys => [:foo]
class Admin < ActiveRecord::Base
  devise :authentication_keys => [ :name ]
end
と書けばOK。:passwordを書くとエラーが起きるので書かない。もしリダイレクト先を変えたければ、routesとapplication_controllerで制御する方法がgithub上のwikiに載っているのでそちらを参照

Deviseのお陰で認証部分をほとんと作らずに済んでかなり助かってます。が、viewは簡単に操作できるからいいとして、認証まわりは結構隠蔽されていて分からない。今後は日本の携帯デバイスなど、PCブラウザ以外のところで問題が起きた時が厄介そうだと思いつつも、MLは活発で質問したらすぐに返答が来たので、今後も使って行きたいところ。

0 件のコメント: