Railsのgemライブラリの「devise」を使うと、
簡単にRailsアプリにユーザ認証機能を組み込むことができます。
deviseへの設定は特に加えずに、
Railsアプリにのユーザ認証機能を組み込んでみました。

# 実際のアプリ開発では、
# この基本的な流れにカスタマイズを加えることが多いですが、
# 全部やってくれる分、カスタマイズにてこずることが多いようです。

rails/deviseのバージョンは以下の通りです。
・railsは 3.2.8
・deviseは 2.1.2

Railsアプリの作成

rails newでrailsアプリを作成します。

$ rails new app
create
create  README.rdoc
create  Rakefile
====

Gemfileのtherubyracerのgemを以下のようにコメントアウトして、有効化。

==  ==
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', :platforms => :ruby
==  ==

bundle installして、rails sでサーバを起動します。

$ bundle install
====
Installing therubyracer (0.10.2) with native extensions
====
$ rails s
=> Booting WEBrick
=> Rails 3.2.8 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-08-21 11:16:47] INFO  WEBrick 1.3.1

[2012-08-21 11:16:47] INFO WEBrick::HTTPServer#start: pid=1837 port=3000
```

この状態で、ブラウザから  http://(ホスト名orIPアドレス):3000/ でアクセスして「Welcome aboard」が表示されることを確認します。 ここまでで、素のrailsアプリ作成が完了。

deviseによる認証機能の追加

次にdeviseを使って、ユーザの認証機能を追加します。 まずは、Gemfileにdeviseのgemを追記。

==  ==  
gem 'devise'  
==  ==  

その後、bundle install, devise:installしてdeviseをインストールします。 ユーザ用のモデルとビューを生成します。 ここでは「user」というモデルを作っています。

$ bundle install  
====  
Installing orm_adapter (0.4.0)  
Installing warden (1.2.1)  
Installing devise (2.1.2)  
====  
$ rails generate devise:install  
create  config/initializers/devise.rb  
create  config/locales/devise.en.yml  
===============================================================================  

Some setup you must do manually if you haven't yet:  

1. Ensure you have defined default url options in your environments files. Here  
is an example of default_url_options appropriate for a development environment  
in config/environments/development.rb:  

config.action_mailer.default_url_options = { :host => 'localhost:3000' }  

In production, :host should be set to the actual host of your application.  

2. Ensure you have defined root_url to *something* in your config/routes.rb.  
For example:  

root :to => "home#index"  

3. Ensure you have flash messages in app/views/layouts/application.html.erb.  
For example:  

<p class="notice"><%= notice %></p>  
<p class="alert"><%= alert %></p>  

4. If you are deploying Rails 3.1 on Heroku, you may want to set:  

config.assets.initialize_on_precompile = false  

On config/application.rb forcing your application to not access the DB  
or load models when precompiling your assets.  

===============================================================================  
$ rails generate devise:views  
invoke  Devise::Generators::SharedViewsGenerator  
create    app/views/devise/shared  
create    app/views/devise/shared/_links.erb  
invoke  form_for  
create    app/views/devise/confirmations  
create    app/views/devise/confirmations/new.html.erb  
create    app/views/devise/passwords  
create    app/views/devise/passwords/edit.html.erb  
create    app/views/devise/passwords/new.html.erb  
create    app/views/devise/registrations  
create    app/views/devise/registrations/edit.html.erb  
create    app/views/devise/registrations/new.html.erb  
create    app/views/devise/sessions  
create    app/views/devise/sessions/new.html.erb  
create    app/views/devise/unlocks  
create    app/views/devise/unlocks/new.html.erb  
invoke  erb  
create    app/views/devise/mailer  
create    app/views/devise/mailer/confirmation_instructions.html.erb  
create    app/views/devise/mailer/reset_password_instructions.html.erb  
create    app/views/devise/mailer/unlock_instructions.html.erb  
$ rails generate devise user  
invoke  active_record  
create    db/migrate/20120821023255_devise_create_users.rb  
create    app/models/user.rb  
invoke    test_unit  
create      test/unit/user_test.rb  
create      test/fixtures/users.yml  
insert    app/models/user.rb  
route  devise_for :users  
$ rake db:migrate  
==  DeviseCreateUsers: migrating ==============================================  
-- create_table(:users)  
-> 0.0059s  
-- add_index(:users, :email, {:unique=>true})  
-> 0.0138s  
-- add_index(:users, :reset_password_token, {:unique=>true})  
-> 0.0010s  
==  DeviseCreateUsers: migrated (0.0210s) =====================================  

この時点でrake routesすると、 サインイン・サインアップなどのユーザ認証機能が用意されていることが確認できます。

$ rake routes  
new_user_session GET    /users/sign_in(.:format)       devise/sessions#new  
user_session POST   /users/sign_in(.:format)       devise/sessions#create  
destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy  
user_password POST   /users/password(.:format)      devise/passwords#create  
new_user_password GET    /users/password/new(.:format)  devise/passwords#new  
edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit  
PUT    /users/password(.:format)      devise/passwords#update  
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel  
user_registration POST   /users(.:format)               devise/registrations#create  
new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new  
edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit  
PUT    /users(.:format)               devise/registrations#update  
DELETE /users(.:format)               devise/registrations#destroy  

各ページにdeviseに関するアラートを表示するように、 「app/views/layouts/application.html.erb」に 以下のように、notice, alert表示の2行を追記します。

<body>  
<p class="notice"><%= notice %></p>  
<p class="alert"><%= alert %></p>  
<%= yield %>  
</body>  

ログイン状態に応じて、 ログイン・ログアウトボタンを表示するためにトップページを作成します。

$ rails g controller home index  
create  app/controllers/home_controller.rb  
route  get "home/index"  
invoke  erb  
create    app/views/home  
create    app/views/home/index.html.erb  
invoke  test_unit  
create    test/functional/home_controller_test.rb  
invoke  helper  
create    app/helpers/home_helper.rb  
invoke    test_unit  
create      test/unit/helpers/home_helper_test.rb  
invoke  assets  
invoke    coffee  
create      app/assets/javascripts/home.js.coffee  
invoke    scss  
create      app/assets/stylesheets/home.css.scss  

「app/views/home/index.html.erb」を以下のように編集し、 ログイン・ログアウトボタンを設置します。

<% if user_signed_in? %>  
<%= link_to "ログアウト", destroy_user_session_path, :method => 'delete' %>  
<%= link_to "ユーザ情報の編集", edit_user_registration_path %>  
<% else %>  
<%= link_to "ログイン", new_user_session_path %>  
<%= link_to "登録", new_user_registration_path %>  
<% end %>  

「config/route.rb」に以下の行を追加して、ルートページを「/home/index」にします。

root :to => "home#index"  

デフォルトのルートページは、リネームしておきます。

$ mv public/index.html public/index.html.bak  

ここまで生成したら、再度「rails s」でrailsを起動。 以下のURLにアクセスすると ログイン・登録と表示されたルーとページが参照できます。  http://(ホスト名orIPアドレス):3000/ 登録から進み、メールアドレスとパスワードを入力して会員登録します。

会員登録後、ログイン・ログアウトができることが確認できます。

とりあえず認証を組み込むだけなら、まずはここまででしょうか。