About-device

認証用GEM devise 導入手順 (2012/04/20~)

Gemfileに以下を追加しbundle installする

1
gem 'devise'

プロジェクトにdeviseをインストールする

1
2
3
4
5
$ rails g devise:install            # Deviseをアプリに組み込み
$ rails g controller welcome index  # トップページを作成
$ rails g devise:views              # Viewを生成
$ rails g devise user               # Userモデルを生成
$ rake db:migrate                   # マイグレーションを実行

1. メールの設定

config/environments/development.rb

例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Hoge::Application.configure do
  (省略)
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              "smtp.gmail.com",
    port:                 587,
    domain:               "domain.of.sender.net"$
    authentication:       "plain",
    user_name:            "XXXXX@gmail.com",
    password:             "XXXXXXXX",
    enable_starttls_auto: true
  }
end

2. ルーティングの設定

config/routes.rbが以下のように設定されているか確認すること
deviseは認証後、rootページへ自動的にリダイレクトする

例)

1
2
3
4
5
6
7
8
9
10
Todo::Application.routes.draw do
  (省略)
  devise_for :users    # ユーザ登録/認証
  get "welcome/index"  # トップページ

  # You can have the root of your site routed with "root"
  # just remember to delete public/index.html.
  root :to => "welcome#index"  # root設定
  (省略)
end

3. Viewの修正

app/views/layouts/application.html.erb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<body>
  <!-- ここから2行追加 -->
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%= yield %>
</body>
app/views/welcome/index.html.erb

<h1>Hogeへようこそ</h1>
<% if current_user %>
  <span><%= link_to 'ログアウト', destroy_user_session_path, :method=>'delete' %></span>
<% else %>
  <span><%= link_to 'ログイン', new_user_session_path %></span>
  <span><%= link_to 'ユーザー登録', new_user_registration_path %></span>
  <span><%= link_to 'パスワード再発行', new_user_password_path %></span>
<% end %>

4. Controllerの修正

※ 認証機能をコントローラに追加する場合は、以下のようにフィルタを設ける
認証済みではない場合はログイン画面へリダイレクトされるようになる

1
2
3
4
5
class HogeController < ApplicationController
  before_filter :authenticate_user!
  ...

end

※その他:
ユーザ登録(sign up)を禁止するには、モデルUserのregistableをコメントアウトする

1
2
3
4
5
6
class User < ActiveRecord::Base
  (略)
  devise :database_authenticatable, #:registerable,
      :recoverable, :rememberable, :trackable, :validatable
  (略)
end

参考:
* Autheticatable : パスワードを暗号化したりログイン時にユーザーを認証したりする
* Confirmable : アカウントをログインするかどうか確認したり、確認方法をメールで送ったりする
* Recoverable : ユーザーのパスワードを初期化したり、初期化方法をメールで送ったりする
* Remenberable : 保存したクッキーを使ってユーザー認証する際のトークンを生成したり削除したりする
* Validatable : メールでvalidationの必要なこと全てやパスワードを生成し、また任意でvalidation方法を変更することができる

またroot的管理者が別の管理者を追加する場合は、user_controller を作成し、個別に new, create, show などを記述する

※日本語化について→今後記述予定(2012/07/20)

参考サイト:
http://kitbc.s41.xrea.com/main/?use_devise
http://myruby.seesaa.net/article/221534274.html
http://t-taira.hatenablog.com/entry/20110101/1293843821
http://d.hatena.ne.jp/dimros/20110326/1301145073
http://d.hatena.ne.jp/babie/20100729/1280381392
http://d.hatena.ne.jp/hrendoh/20110906/1315282969
http://d.hatena.ne.jp/akihito_s/20110708
http://d.hatena.ne.jp/watanabe162/20110729/1311928889
http://d.hatena.ne.jp/watanabe162/20110731/1312112812
http://d.hatena.ne.jp/watanabe162/20110731/1312119021
http://eitoball.blogspot.jp/2009/11/devise-rails.html
http://blog.livedoor.jp/nizoraul/archives/3597234.html