• ブログ
  • ふぉとす
  • キーワード
  • ブックマーク
  • 写真
  • ログイン

Title

« 今週の休日の楽しみ | acts_as_state_machineのfind_in_stateを複数状態指定可能にする »
  • restful_authenticationを使ってみた 2008-06-13 23:52:48

    Railsでユーザ認証といえばacts_as_authenticatedだと思っていたのですが、今はもうrestful_authenticationというやつが出てきているようです。けっこう前から? アンテナ低いのはなんとかしなければ。とりあえず、今開発中のかえるキーワードで使ってみることにした。
    まずはインストール。

    ./script/plugin source http://svn.techno-weenie.net/projects/plugins
    ./script/plugin install restful_authentication
    

    restful_authenticationは、acts_as_state_machineというやつを使うのでこいつもインストール。

    ./script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/
    

    それからacts_as_authenticatedみたいにモデルやらコントローラを作ります。

    ./script/generate authenticated user sessions \
                  --include-activation \
                  --stateful
    

    これでuser, user_mailer, user_observerモデルと、user, sessionコントローラが作られます。
    モデルのほうはacts_as_authenticatedでおなじみのやつらと一緒。オブサーバを使うので、config/environment.rbのInitializerブロックの中で

    config.active_record.observers = :user_observer
    

    と指定しておきます。
    acts_as_authenticatedではaccountコントローラひとつだったけど、アカウント管理関係はuserコントローラに、ログイン処理関係はsessionコントローラにわかれています。
    上記で--include-activationと定義しているけど、これだけでメールを使ったユーザ登録処理が実装される。これは便利ですね。acts_as_authenticatedでは自分で書いていたから。
    --statefulはacts_as_state_machineを使ってユーザの管理をするよ、という宣言。acts_as_state_machineなんてはじめてきいたけど、userモデルを読むとなんとなくわかる。

      acts_as_state_machine :initial => :pending
      state :passive
      state :pending, :enter => :make_activation_code
      state :active,  :enter => :do_activate
      state :suspended
      state :deleted, :enter => :do_delete
    

    こんな感じで状態が宣言されている。initialが初期状態で、enterキーでその状態になったときに実行するメソッドを示しているみたいだ。
    さらに、

      event :register do
        transitions :from => :passive, :to => :pending, :guard => Proc.new {|u| !(u.crypted_password.blank? && u.password.blank?) }
      end
    

    こんな感じで状態が変化するイベントを定義する。イベントは

    current_user.activate!
    

    といったようにUserインスタンスのメソッドとして「!」つきでコールすればいいみたい。なかなかおもしろい。
    で、あとは rake db:migrate を実行すればOK。ログイン時にメールアドレスを使用したかったらちょっと書き直さなければいけないのはacts_as_authenticatedと同様。あと、reset_sessionを要所要所に追加したほうがよさそうです。
    本登録の認証のため、avtivateはactivate_codeパラメータを受け取れるようにmap.connectで別に書くか、デフォルトのルーティングを生かして、activateコードをidで受け取るように書き換える必要があります。
    これでとりあえず動きますが、ユーザの状態管理をするならconfig/routesの設定もしておきます。

      map.resources :users, :member => {:suspend => :put, :unsuspend => :put, :purge => :delete}
      map.resource :session
    

    ユーザ状態の変更アクションはusers_pathへリダイレクトするので、indexアクションを用意しておきましょう。

    Commentコメント(0) Pageリンク元(703) Append 506
  • Qステア QSS07 スカイライン GT-R R32スターターセット (A/B)
    メディア: おもちゃ&ホビー
    Perlプログラミング救命病棟 (Programmer’s foundations)
    作者/アーティスト: トップスタジオ,伊藤 直也
    メディア: 大型本
« 今週の休日の楽しみ | acts_as_state_machineのfind_in_stateを複数状態指定可能にする »

プロフィール

おおいしつかさ

Amazon商品の一覧

人気の記事ベスト10

  • 1.apache+mod_proxy_balancer+mongrelでRailsを動かす方法
  • 2.Perlでevalを使ってみる
  • 3.バージョン管理をsubversionからgitに移行してみた
  • 4.tokyobikeのドロップハンドル化
  • 5.restful_authenticationを使ってみた
  • 6.ubuntu8.04でデュアルディスプレイを使う
  • 7.URLなど、長い英字を折り返して表示する方法
  • 8.MySQLコンファレンス2008 2日目に参加してきました。
  • 9.RailsとPostfixで受信メールを処理する方法
  • 10.Rspecでコントローラのspecファイルを書く

コメント

  • おおいしつかさ(へぼ将棋にいそしむ)
  • 武石(へぼ将棋にいそしむ)
  • ユル(しろさん、小鳥を食べるの巻)
  • おおいしつかさ(今読んでいる本)
  • 武石(今読んでいる本)
  • ユル(プログラマが若隠居をしたら)
  • ユル(風邪ひいた)

過去の記事

2006年
12月
2007年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2008年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2009年
1月

キーワード一覧

ActionScript AmazonResources Erlang git javascript kaeruspoon milook NSR Objective-C Rails Ruby Ruby on Rails subversion Thin tokyobike ubuntu VAIO VAIO typeZ Waves Xen ぐりぐり カンタロー スノボー ドトール ドライブ バイク プログラミング ユルさん 執筆 日本酒 模型 真中洋嗣 自転車

Youtube

ニコニコ動画