Ruby on Rails 3.0 日記
第12回: ユーザー認証(1)
前回は、Rails 3.0 で導入された新しい Gem パッケージ管理ツール Bundler を紹介しました。
今回と次回はユーザー認証の仕組みをアプリケーションに追加します。
Devise
Devise を利用すると、メールアドレスとパスワードによるユーザー認証機構を Rails アプリケーションに簡単に組み込むことができます。
現時点(2010/08/30)での最新版は 1.1.2 です。Gemfile を次のように修正してください。
source 'http://rubygems.org' gem 'rails', '3.0.0' gem 'sqlite3-ruby', :require => 'sqlite3' gem 'will_paginate', '3.0.pre' gem 'devise', '1.1.2'
続いて、Bundler でインストールします。
% bundle install
ただし、Windows ユーザーの方は、Devise が依存する bcrypt-ruby パッケージのインストールで失敗するかもしれません。その場合、おそらく次のようなエラーメッセージが出ていることでしょう。
'make' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。
この場合は、DevKit をインストールしてみてください。手順は、以下の通り:
- http://rubyinstaller.org/downloads/ を開き、「DEVELOPMENT KIT」セクションにある最新の .exe ファイル(自己展開型圧縮データ)をダウンロード。
- ダウンロードしたファイルをダブルクリックし、展開(解凍)先のフォルダとして「C:\DevKit」と指定する。
- コマンドプロンプトを開き、以下のコマンドを順に実行する。
cd \DevKit ruby dk.rb init ruby dk.rb install
DevKit のインストールが完了したら、Nchack アプリケーションのフォルダに戻って、再び bundle install を実行してください。
コマンド gem list devise を入力して、次のように出力されればインストール成功です。
*** LOCAL GEMS *** devise (1.1.2)
[更新] DevKit を利用して Windows 環境に Devise をインストールする手順の記述を追加しました。(2010-10-11)
Windows 環境で使用できる Ruby バイナリには、rubyinstaller.org で配布しているものの他に、ActiveScriptRuby もあります。しかし、ActiveScriptRuby は DevKit に対応しておりませんのでご注意ください。読者から教えていただきました。(2010-11-12)
Devise の準備
Devise を使うには、いくつか準備作業が必要です。
まず、Devise をアプリケーションに組み込みます。
% rails generate devise:install
次に、config/environments/development.rb を開いて、次のように修正します。
Nchak::Application.configure do
(省略)
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
end
本番環境にアプリケーションをセットアップする際には、実際に使用するドメイン名を config/environments/production.rb に記述する必要があります。
次に、app/views/layouts/application.html.erb を修正します。ログインに成功または失敗した時などに Devise が設定するメッセージを画面に表示するためです。
(省略)
<div id="contents">
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</div>
(省略)
トップページの作成
我々の Nchak にはまだトップページがありません。この辺りで作っておきましょう。
まず、public/index.html を削除します。
次に、config/routes.rb を修正します。
Nchak::Application.routes.draw do
root :to => 'welcome#index'
resources :tasks, :only => [ :index, :create ] do
put :finish, :on => :member
put :unfinish, :on => :member
get :done, :on => :collection
end
end
root :to => 'welcome#index' という記述は、ルートパス(/)にアクセスがあったら、welcome コントローラの index アクションが対応する、ことを宣言しています。
welcome コントローラの index アクションを生成します。
% rails generate controller welcome index
ブラウザでトップページを開くと、次のように表示されるはずです。

ビューの生成
Devise が使用する標準のビュー(HTMLテンプレート)を生成します。
% rails generate devise:views
このコマンドを実行すると、app/views/devise ディレクトリに数多くの ERB ファイルが生成されます。Devise はこれらのテンプレートを使って、ユーザー登録フォーム、ログインフォーム等を表示したり、ユーザー登録の確認メールの本文を作ったりします。我々がこれらを書き換えれば、自由にアプリケーションをカスタマイズできます。
User モデルの作成
User モデルを作ります。
% rails generate devise user
このコマンドによりモデルクラスファイルとマイグレーションスクリプトが生成されます。
モデルクラスファイル app/models/user.rb の中身は、こうなります。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :lockable and :timeoutable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation
end
マイグレーションスクリプト db/migrate/20100522000000_devise_create_users.rb は、こうです。
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.confirmable
t.recoverable
t.rememberable
t.trackable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :confirmation_token, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :unlock_token, :unique => true
end
def self.down
drop_table :users
end
end
マイグレーションを実行します。
% rake db:migrate
第13回: ユーザー認証(2)へ続きます。
[更新] Rails 3.0.0 正式リリースと Devise 1.1.2 リリースに合わせて、Gemfile のコードを変更しました。(2010/08/30)
[更新] 読者からのご指摘により、rails generate devise_installdevise:install と修正しました。同様に rails generate devise_viewsdevise:views と修正しました。(2010/09/07)
[更新] Devise 1.1.2 リリースに合わせて、User モデルとマイグレーションスクリプトのコードを変更しました。(2010/10/11)
(2010/05/18)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- 第1回: インストール (2010/04/24)
- 第2回: 新規アプリケーションの作成 (2010/04/25)
- 第3回: コントローラとビューの生成(1) (2010/04/28)
- 第4回: コントローラとビューの生成(2) (2010/04/29)
- 第5回: データベーステーブルとモデル (2010/05/01)
- 第6回: タスクの一覧 (2010/05/02)
- 第7回: タスクの新規追加フォーム (2010/05/09)
- 第8回: タスクの新規追加 (2010/05/09)
- 第9回: タスクの完了 (2010/05/15)
- 第10回: 完了したタスクの一覧 (2010/05/16)
- 第11回: Bundler (2010/05/17)
- 第12回: ユーザー認証(1) (2010/05/18)
- 第13回: ユーザー認証(2) (2010/05/19)
- 第14回: ユーザーとタスクの関連づけ (2010/05/29)
- 第15回: Devise によるユーザー認証機能の日本語化(1) (2010/10/09)
- 第16回: Devise によるユーザー認証機能の日本語化(2) (2010/10/15)
- 第17回: Devise によるユーザー認証機能の日本語化(3) (2010/10/16)

