はじめてのRuby on Rails、トラブル記録
スポンサーサイト

一定期間更新がないため広告を表示しています

posted by スポンサードリンク | | - | - | - |はてなブックマーク - スポンサーサイト
restful_authenticationのステータス管理をaasmに変える
restful_authenticationのステータス管理(仮登録⇒本登録みたいな)はデフォルトではacts_as_state_machineというプラグインを使いますが、いつも一方的にお世話になっているザリガニが見ていた...。さんによると、acts_as_state_machineはもう更新されてなくて、aasmというプラグインが今も更新されているみたいです。
aasmって名前がacts_as_state_machineを略しただけっぽいので別なものと思っていませんでした。

更新が止まっているやつは基本代替えがあれば使わないようにしてるので、aasmに入れ替えてみようと思います。

【1】restful-authenticationでファイルのジェネレート


restful-authenticationのくわしい導入手順は前に記事を書いたので省略。→こちら
ruby script¥generate authenticated user sessions --stateful
ここは同じ。

【2】aasmのインストール


一般的にはgemでインストールする方法が紹介されていることが多いですが、vendor¥pluginに入れたかったのでscript¥pluginでインストールしました。
ruby script¥plugin install git://github.com/rubyist/aasm.git

Windowsでgitの環境を導入していない場合はこちらを参照。

【3】aasmが動くようにモデルファイルを修正


aasmが動くようにするには、モデルでいくつか修正が必要でした。
この例では【1】でuserモデルを作ったので、user.rbを修正します。
require 'digest/sha1'
class User < ActiveRecord::Base
 include AASM # 追加
include AASMを追加。

以下は元の状態です。赤字の部分を変更します。
attr_accessible :login, :email, :password, :password_confirmation

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


変更後はこうなります。
attr_accessible :login, :email, :password, :password_confirmation

aasm_column :state # 追加
aasm_initial_state :pending

aasm_state :passive
  :
  :(略)
  :

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

aasm_column :stateを追加、
初期設定のステータスの書き方はaasm_initial_stateに変更、
stateはaasm_state、eventはaasm_eventに変更。

これだけで普通に動きました楽しい
posted by トモト | 15:19 | 認証機能 | comments(0) | trackbacks(0) |はてなブックマーク - restful_authenticationのステータス管理をaasmに変える
restful_authenticationで認証機能追加(3)
前回とりあえずrestful_authenticationを入れて画面を表示させるところまではできたので、
まともに動かせるようにしていきます。

【1】ログインしないと編集できないようにする


script¥generate authenticatedで新しくできたusers_controller.rbとsessions_controller.rbを見ると、
一番最初に以下のように書かれています。
class UsersController < ApplicationController
 # Be sure to include AuthenticationSystem in Application Controller instead
 include AuthenticatedSystem

メッセージにしたがって、
application_controller.rbにinclude AuthenticatedSystemを追加します。
class ApplicationController < ActionController::Base
include AuthenticatedSystem

次に、認証をしたいアプリのコントローラーに、認証しないと操作できないよう〜というのを書きます。
私の場合はpages_controllerという名前なのでここに追加します。
class PagesController < ApplicationController
 before_filter :login_required, :only=> [:new, :edit, :destroy]

新規投稿、編集、削除には認証が必要なようにしたかったので、:only=> [:new, :edit, :destroy]としました。
アプリ全体に認証を書けるなら:only以下は不要です。

これで一度画面を確認してみます。
「新規登録」「編集」「削除」ボタンを押すと、ログイン画面が出ます。成功〜嬉しい


【2】データベースを作る


マイグレーションをするので、作成するデータベースの内容を変更する場合はscript¥generate authenticatedでできたmodels/user.rbの中身をいじります。
内容が問題なければ、そのまま
rake db:migrate

でデータベースを作ります。

これでscript¥serverでhttp://localhost:3000/signupにアクセスすると、ユーザー登録ができるようになりました!
ユーザー登録後はエントリーの新規投稿、編集、削除もできるようになったし、結構簡単にできちゃって、これはいいですねおてんき
あとはログアウトへのリンクとか、もろもろ細かい調整をすればいい感じになりそうです。



【追記】
よく考えりゃあたりまえですが、--statefulつけてgenerateしたので、
最初に登録後なんかログインできないと思ってデータベースの中身確認してみたら、
ステータスがpendingになってた。

ログインしたかったのでデータベースからアクティベーションコードをコピって
http://localhost:3000/activate/アクティベーションコード、ってアクセスしたらアクティベートされたグッド
超無理やりwwww

その後ユーザーリストを表示してボタンを押したら「アクティベート」ボタンを押したらアクティベートするようにしてみたけど、
とりあえず初回触ってみるだけなら--statefulいらなかったかもね。。。
ゆくゆくはこのユーザーリストを高級にしたような感じで管理者ページとかも作りたいな。



【参考】
ザリガニが見ていた...。 restful_authenticationを利用してみる(An introduction log of restful_authentication)
posted by トモト | 18:36 | 認証機能 | comments(0) | trackbacks(0) |はてなブックマーク - restful_authenticationで認証機能追加(3)
restful_authenticationで認証機能追加(2)
それではさっそくrestful_authenticationの導入を始めてみます。

英語読むのめんどくさいからついつい日本語サイトをたよりにしがちだけど、
困った時はなにはともあれ、本家は大事なんだぜ!というのをi18n_generatorのときに学んだw

ということでまずは本家です↓

・配布元サイト http://github.com/technoweenie/restful-authentication#INSTALL
・Wiki http://wiki.github.com/technoweenie/restful-authentication



【1】restful_authenticationのインストール


インストールします。
ruby script¥plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
もじゃもじゃと何やらいっぱいメッセージが出てインストール完了しました。

【2】restful_authenticationの設定をする


ジェネレートします。
ruby script¥generate authenticated モデル名 セッション名 (オプション1)(オプション2)
となってて、普通モデル名はuser、セッション名はsessionsとかにするようなのでそのとおりやります。
オプションには以下のものがあるようです。

  • --include-activation……メール認証する

  • --stateful……acts_as_state_machine,略してaasmとかいう別のプラグイン?を使ってユーザーの状態管理をする

  • --skip-migration……ジェネレートしたときに作ったモデルのマイグレーションをしない


acts_as_state_machineってなんじゃい!?と思ったけど、とりあえず--statefulのみ付けてやってみました。
⇒【追記】初めてためすだけなら--statefulつけない方が無難かも。詳しくは(3)の追記で。
ruby script¥generate authenticated user sessions --stateful

これを実行したら、のらのらーっといっぱいメッセージが出ましたが、一番最初にこんな文がありました。
----------------------------------------------------------------------
Don't forget to:

1 map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'

2 - add an observer to config/environment.rb
config.active_record.observers = :user_observer

3Also, don't forget to install the acts_as_state_machine plugin and set your reso
urce:

svn export http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/tr
unk vendor/plugins/acts_as_state_machine

4In config/routes.rb:
map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purg
e => :delete }

5Try these for some familiar login URLs if you like:

map.activate '/activate/:activation_code', :controller => 'users', :action => 'a
ctivate', :activation_code => nil
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'

----------------------------------------------------------------------

忘れんな!って、いくつかやらなきゃいけないことがあるみたいです。

1
map……といえばconfig/routes.rbかな。config.rbに以下を追加しました。
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'


2
config/environment.rbにobserverを追加しなさいと書いてあるので書いてある通り追加しました。
config.active_record.observers = :user_observer


3
出ました。さっき「なんだろう?」と思ったacts_as_state_machine。このプラグインを入れろというので、これを入れてみます。親切に場所も書いてあります。
ruby script¥plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/


4
見たところユーザーの状態設定のようです。acts_as_state_machineを入れたので、ユーザーステータスを設定ってとこかな。config/routes.rbの最初の方に、script¥generate authenticatedをやったときに追加されてたmap.resourceの下に加えました。
map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete }


5は他にもこんな感じで入れてみんさい〜ということみたいですね。
練習なのでこのまま全部入れてみます。
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
これでhttp://localhost:3000/signupで新規登録画面、http://localhost:3000/loginでログイン画面、http://localhost:3000/logoutでログアウトになるはずかな?


ここまででhttp://localhost:3000/signupとかを確認してみたところ、サインアップ画面が出ました楽しい
元のプロジェクトのURL入れるとまだログインなしでも表示されちゃうけど……。
その辺の設定はまた次回以降!

(次の記事へ)


【参考】
あとで読むRailsのススメ
 restful_authenticationhttp://japan.zdnet.com/blog/yoshimi/2008/03/25/entry_27016453/
 acts_as_state_machinehttp://japan.zdnet.com/blog/yoshimi/2008/04/10/entry_27016454/
posted by トモト | 15:24 | 認証機能 | comments(0) | trackbacks(0) |はてなブックマーク - restful_authenticationで認証機能追加(2)
restful_authenticationで認証機能追加(1)
かんたんRuby on RailsでWebアプリケーション開発の6日目で認証機能を追加するということで、
本ではLoginEngineというプラグインを使っていたけれど、Rails2.xにアップデートしたときの諸々のトラブルで、
Railsにはプラグインがいっぱいあるんだってことを知ったので、
とりあえずLoginEngineの今の状況を調べてみることにしました。
本ではRails1.2.4を前提にしてるので2.0以降だと対応してなかったりすると面倒だし、
ほかにもっとよさそうなプラグインがあるならそっちを使った方がいいしね。

それで調べてみたところ、なんだかLoginEngineについての最近の記事が全然ない……。
どうも今使ってる人はほとんどいないみたい。
記事があんまりないプラグイン使ってしまうと、トラブったときに調べたりするのも大変だから
LoginEngineを使うのはやめておこうあせあせ

ほかに見てた中でよさそうだと思ったのが、タイトルにも入れたrestful_authentication。
これは以前acts_as_authenticatedていう名前で定番だったのが新しくなったもので、結構話題にも上がってるみたい。
いいなと思ったのが、

  • ユーザーの状態管理ができる……正会員、仮登録、退会とか

  • メール認証できる……フォームを入力したらメールが送られて、メールに書かれたURLをクリックしたら正式登録ってやつ

の2つがあったこと。

というわけで、次回からこのrestful_authentificationを導入してみます!

(次の記事へ)
posted by トモト | 14:44 | 認証機能 | comments(0) | trackbacks(0) |はてなブックマーク - restful_authenticationで認証機能追加(1)
Rails3レシピブック 190の技
Rails3レシピブック 190の技
ついにRails3対応版が出ました!!
WEB+DB PRESS Vol.58
WEB+DB PRESS Vol.58
Rails2系から3への移行時に知りたいことがひとまとまりになっててよかった!色々ググるよりこれを読む方が早い。
Rubyレシピブック 第3版 303の技
Rubyレシピブック 第3版 303の技
Rubyやるならこのリファレンスは必要。
Search this site