Railsアプリケーションを作ってみる。devise – ユーザー認証機能編

こんにちは。小川です。
Webアプリケーション開発からだいぶ遠ざかっていたので勘を取り戻しつつコーディングに励んでいます。


先日の作業の流れ編に引き続きRailsでのWebアプリケーション作りでしたが、いずれにせよユーザーの認証機能が必要ですので、まずはそこらへんから。
Railsでユーザー認証の機能をつくるには、deviseが便利とのことでしたので、deviseを使ってみることにしました。

参考サイトは以下です。

Github – plataformatec / devise
RailsでDeviseを使ってみた – Deep Valley
devise – Stack Overflow
(拙い英語力ながら、Stack Overflowには毎度お世話になってます。)


参考記事の流れの通りですが、まずはGemfileにdeviseを追加しbundle installします。
そしてrailsコマンドでインストール。

rails g devise:install

そして以下のファイルに記述を追加。

config/environments/development.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }

ルーティングの設定。

config/routes.rb
devise_for :users
root :to => "home#index"

ルーティング確認。

rake routes

                  Prefix Verb   URI Pattern                    Controller#Action
              home_index GET    /home/index(.:format)          home#index
        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

そしてviewにメッセージ用のhtml追加。

app/views/layouts/application.html.erb

<%= notice %>

<%= alert %>


次にモデルの作成
rails g devise User

ホームコントローラー#インデックスの作成
rails g controller home index

認証チェック
app/controllers/application_controller.rb
before_filter :authenticate_user!

ログイン画面作成
views/home/index.html.erb

認証

<% if user_signed_in? %> <%= link_to "ログアウト", destroy_user_session_path, method: :delete %> <% else %> <%= link_to "ログイン", new_user_session_path %> <% end %>

カスタマイズ用ビュー作成
rails g devise:views



これでルートにアクセスすれば閲覧できそうでしたがテスト用に作ってあったUserモデルやコントローラが原因でエラー。。。
一旦、rails newでアプリケーションを作りなおしてからdeviseをインストールすることで、無事ログイン機能その他を確認することができました。

rails-deviseでユーザー認証、ログインページの実装




簡単で便利すぎます。Railsすごいぞ。
いずれはOpenIDを使用してのログイン機能も実装してみます。