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は活発で質問したらすぐに返答が来たので、今後も使って行きたいところ。
コメント