Nitrousでアプリ作成(認証機能編)
友人宅でハマってコミックを大人買いし、最近Kindleでさらに全巻買い直した『王様の仕立て屋』。新規事業を手がけるようになったので、今年のクールビズは少しオシャレに演出してみたいと思案中。
技術職でもスーツスタイルの会社なので、ジャケパンは厳しそう…。ジャケパンは伝統的なビジネスルックでも無いしね。かといって、パナマ帽に麻の白スーツの戦前のビジネスマンルックも時代錯誤な感じがする…
ゴールデンウィークを利用して、テーラーさんに聞きに行ってみよう。
さて、先輩との飲み会が流れたので、認証機能を実装しちゃいます。
認証機能は、Deviseを使ってみます。手順は以下に記録していきますが、Rails Girls Guideの『Devise で認証機能を追加』をそのまま実行していくので、同サイトの方が見やすいと思います。
とりあえずビール
~/workspace/appname(master)$ git checkout -b "devise"
Deviseのインストール
Gemfileに以下を記述。他のGemもバージョンを記載しているので、deviseもバージョンを振っておきます。
gem 'devise', '~>3.2.4'
~/workspace/appname(devise)$ bundle install
アプリに devise をセットアップ
rspec入れた時と同じようなイメージだろうか…?指示通りに実行。
~/workspace/appname(devise*)$ rails g devise:install
以下の設定が済んでなかったら、手動で設定してくれよ、と出るので指示通り設定。
まずは、config/environments/development.rbにURLを設定。nitrousなのでlocalhostではなくて与えられたURLをセットする。
# Devise setup
config.action_mailer.default_url_options = { host: 'http://userurl.nitrousbox.com:3000' }
config/route.rbにrootを設定する指示は、『Nitrousでアプリ作成(固定ページ作成編)』で設定したので無視。
app/views/layouts/application.html.erbにコードを追加。ターミナルに表示された内容と、Rails Girlsの内容が異なっているが、Rails Girlsのコードの方がCoolなのでこちらを採用。
<% if notice %>
<p class="alert alert-notice"><%= notice %></p>
<% end %>
<% if alert %>
<p class="alert alert-error"><%= alert %></p>
<% end %>
次のconfig.assets.initialize_on_precompileをfalseにする設定も、rails3.2以下+Heroku 利用が対象なので無視。
最後にユーザーモデルを作る為にコマンドを実行。またターミナルの指示とRails Girlsの指示が異なるため、Rails Girlsのコマンドを実行。
~/workspace/appname(devise*)$ rails g devise user
invoke active_record
create db/migrate/20140427143824_devise_create_users.rb
create app/models/user.rb
invoke rspec
create spec/models/user_spec.rb
insert app/models/user.rb
route devise_for :users
~/workspace/appname(devise*)$ rake db:migrate
ログイン機構の実装
app/views/layouts/_header.html.erbに以下の一文を実装。
<% if user_signed_in? %>
<li><%= link_to 'Edit profile', edit_user_registration_path, :class => 'navbar-link' %></li>
<li><%= link_to "Logout", destroy_user_session_path, method: :delete, :class => 'navbar-link' %></li>
<% else %>
<li><%= link_to "Login", new_user_session_path, :class => 'navbar-link' %></li>
<% end %>
Rails Girlsでは、application_controller.rbに以下の一文を書くように指示があるが、これを入れてしまうと、初めてindexページに遷移した際にログインページに飛ばされてしまうので、今回は入れません。
before_action :authenticate_user!
ログイン画面やエディット画面を編集したいけど、deviseはviewを生成していないので、どこを編集すればよいのか分からない…
とりあえず、今日のところは疲れたので、これで良しとする。
終わりに
いつも通り、プッシュして終わり。Herokuにrake dbするのを忘れずに。
~/workspace/appname(devise*)$ git add .
~/workspace/appname(devise)$ git commit -m "devise setup"
~/workspace/appname(devise)$ git checkout master
~/workspace/appname(master)$ git merge devise
~/workspace/appname(master)$ git push
~/workspace/appname(master)$ git push heroku
~/workspace/appname(master)$ heroku rake db:migrate
メモ
- 次はログイン後の画面を作る。ログイン前とログイン後のパーシャルを作って切り替えたらどうだろうか…。チュートリアルを見て少し考える。