{ 2010.9.13 }

Rails3 で restful-authentication

    こんにちはヤマモトです。
    rails3の正式リリースもなされ、いよいよ実案件での運用も視野に入り始めてきました。

    今回は、Ruby on Rails3で、restful-authenticationは動くのか、というのを取り上げます。

    restful-authenticationとは、サイトのユーザー認証機構を組み込むのには便利なプラグインです。
    ユーザー登録、ログイン、ログアウト用のviewファイルや、
    ユーザー用モデル生成、メールアクティベート、ログイン保持などの機能を一気に提供してくれるので大変重宝しています。

    まずは、プロジェクトを生成します。
    なお、rubyは1.9.2(RVM)です。

    rails new sample

    (旧 rails sample)
    でプロジェクトが作成されます。

    そして、db:createもせずにとりあえず起動。

    rails s

    (旧 ruby script/server)

    ところが

    Could not find gem 'sqlite3-ruby (>= 0, runtime)' in any of the gem sources.

    のエラー。

    プロジェクト作成時はデフォルトでsqlliteが指定されるのは従来と変わりませんね。
    ということで、config/database.yml内のsqlite表記部分を、postgresへ変更。
    しかし、それでも上記のエラーが出続けます。
    従来であればここを変えればよかったのですが、設定箇所が別のファイルに移ったのでしょうか。
    とりあえず、データベースを指定して作りなおします。

    rails new sample -d postgresql

    すると次のエラーが。

    LoadError (no such file to load -- openssl)

    OpenSSLは使ってないはずですが必要のようですね。

    CentOSを使用したので、
    yum install openssl openssl-devel
    ※debian系は適宜読み替えてください。

    あとはインストールです。

    ruby ~/.rvm/src/ruby-1.9.2-p0/ext/openssl/extconf.rb
    make && make install

    さて、これでようやく
    「Welcome aboard」
    の画面が表示されました。

    では、restful-authenticationを導入してみます。
    導入方法の詳細は様々なページでご紹介されているので詳しくは割愛します。

    まず、restful-authenticationがrails3に対応しているかですが、以下から提供されているようです。
    http://github.com/Satish/restful-authentication

    状態管理をサポートするacts_as_state_machineや、パスワード再発行に便利なforget_passwordは従来のままで使えそうです。

    aasm

    gem sources -a http://gems.github.com
    gem install rubyist-aasm

    forget_password

    ruby script/plugin install git://github.com/greenisus/forgot_password.git

    そして、ジェネレート。

    rails g authenticated user sessions --include-activation --aasm

    modelやview、controllerが生成されます。

    では、ユーザー登録を行ってみます。

    http://hostname/signup

    でユーザー登録ページへアクセス。

    すると、

    uninitialized constant UsersController::AuthenticatedSystem

    AuthenticatedSystemが読み込まれてないとのエラーが。
    ここでrails3の洗礼です。
    rails3はlib以下のファイルを自動でロードしてくれません。
    今まではlib以下に作られるauthenticated_system.rbを自動でincludeしてくれていました。
    rails3では、明示的に記述しないといけません。

    記述場所はconfig/initilizer以下にcustom_requires.rbというファイルを作成して

    require 'authenticated_system.rb'

    と記述。

    これでようやくユーザー登録ページが開き、実行することができました。

    Leave a Reply