New-Village

月間ブログ。だいたい1カ月に1回は更新しているようです。

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 

メモ

  • 次はログイン後の画面を作る。ログイン前とログイン後のパーシャルを作って切り替えたらどうだろうか…。チュートリアルを見て少し考える。