認証用プラグインrestful_authentication+セッションDB保持

大参考:restful_authenticationを触ってみた - idesaku blog
①プロジェクト作成。DBをMySQL指定する。

>rails authtest --database=mysql

②作ったプロジェクトのディレクトリに移動して、restful_authenticationインストール

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

③モデルをジェネレート

>ruby script/generate authenticated user sessions

NetBeansにプロジェクトを作成してインポート

    1. [ファイル]−[新規プロジェクト]を選択
    2. カテゴリ=Rubyの「既存のソースを利用したRuby on Railsアプリケーション」を選択して次へ
    3. [参照]ボタンで取り込むプロジェクトを指定、Ruby実行環境、サーバを指定

⑤database.ymlを編集

development:
  adapter: mysql
  encoding: utf8
  database: authtest
  username: root
  password:
  host: localhost
・・(以下略)・・

MySQLでdatabase作成

mysql> create database authtest;
mysql> use authtest;
mysql> set names utf8;

⑦セッション格納先をactive_record_storeに変更する。config/environment.rbで以下の1行のコメントを外す

config.action_controller.session_store = :active_record_store 

⑧controllers/applicatoin.rbで:secret・・・以下のコメントを外す

protect_from_forgery # :secret => '877ec2c2dae20dc4e12057c9776c2127'


⑨セッション格納用テーブル準備

>rake db:sessions:create

⑩マイグレート実行。→users、seessionsテーブルが作成される。

>rake db:migrate

mysql> show tables;
+--------------------+
| Tables_in_authtest |
+--------------------+
| schema_migrations  |
| sessions           |
| users              |
+--------------------+

⑪config/routes.rbを編集。次の5行を書き足す。

ActionController::Routing::Routes.draw do |map|
  # この2行はおそらく勝手に追加されている。無ければ書く。
  # sessionsではなくsessionである点に注意。
  map.resources :users
  map.resource :session

  # 次の3行を書く。
  map.signup '/signup', :controller => 'users', :action => 'new'
  map.login '/login', :controller => 'sessions', :action => 'new'
  map.logout '/logout', :controller => 'sessions', :action => 'destroy'

⑫user_controller.rbとsession_controller.rbの冒頭をコメントアウト(削除)し、application_controller.rbに追記

class UsersController < ApplicationController
  ## Be sure to include AuthenticationSystem in Application Controller instead
  #include AuthenticatedSystem
・・・

class ApplicationController < ActionController::Base
  # 認証用で追加
  include AuthenticatedSystem
・・・


⑬ログイン後にアクセスできるページが欲しいので、コントローラを追加で作成しておく。portalとした。

>ruby script\generate controller portal index

?app/views/portal/index.html.erbを編集する。

<h1>Portal#index</h1>
<p>Find me in app/views/portal/index.html.erb</p>
<p><%= current_user.login %>さん、ようこそ。</p>
<%= link_to 'ログアウト', logout_url %>

⑭app/controllers/portal_controller.rbに認証設定する。

class PortalController < ApplicationController
  # 認証が必要
  before_filter :login_required

  def index
  end

⑮デフォでportalコントローラを見に行くように設定する。

    1. config/routes.rbを編集
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
  
  # デフォルト画面を設定
  map.root :controller => "portal"
end
    1. public/index.htmlを削除

⑯WEBサーバをあげて確認。http://localhost:3000/portal/index にアクセスする。
未ログイン状態:

最初はユーザがいないので、 http://localhost:3000/signup にアクセスしてユーザを作成する。

ログイン状態:

ログインするとセッション情報がDBに格納される。

mysql> select * from sessions;
+----+----------------------------------+----------------------------------------------------------------------
-----------+---------------------+---------------------+
| id | session_id                       | data
           | created_at          | updated_at          |
+----+----------------------------------+----------------------------------------------------------------------
-----------+---------------------+---------------------+
|  3 | bbb5acf4d8ed71e7612ed12dbd1c51b5 | BAh7BzoOcmV0dXJuX3RvIhIvcG9ydGFsL2luZGV4IgpmbGFzaElDOidBY3Rp
b25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA
 | 2008-07-08 09:00:27 | 2008-07-08 09:00:31 |
+----+----------------------------------+----------------------------------------------------------------------
-----------+---------------------+---------------------+