認証用プラグイン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にプロジェクトを作成してインポート
-
- [ファイル]−[新規プロジェクト]を選択
- カテゴリ=Rubyの「既存のソースを利用したRuby on Railsアプリケーション」を選択して次へ
- [参照]ボタンで取り込むプロジェクトを指定、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コントローラを見に行くように設定する。
-
- config/routes.rbを編集
map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' # デフォルト画面を設定 map.root :controller => "portal" end
-
- 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 | +----+----------------------------------+---------------------------------------------------------------------- -----------+---------------------+---------------------+