ユーザ登録機能の追加
gemについて
Railsでの開発が早い理由の一つにさまざまなgemの存在があります。 ここでは、deviseというユーザ登録機能のgemを用いて、 簡単に複雑な処理を追加できることを体感してみましょう。
deviseのインストール
Gemfileに
gem 'devise'
と追加し
bundle install rails g devise:install
と利用できる状態にします。
deviseの設定
config/environments/development.rbに
config.action_mailer.default_url_options = { host: 'localhost:3000' }
を追加
config/routes.rbに
root 'nicknames#show'
を追加
app/views/layouts/application.html.erbの<%= yield %>直前に
<p class="alert"><%= alert %></p>
を追加
rails g devise User rake db:migrate
でユーザ登録用モデル作成
app/views/layouts/application.html.erbのheader部<ul></ul>間に下記を追加
<% if user_signed_in? %>
<li><%= link_to 'プロフィール変更', edit_user_registration_path %></li>
<li><%= link_to "ログアウト", destroy_user_session_path, method: :delete %></li>
<% else %>
<li><%= link_to "サインイン", new_user_registration_path %></li>
<li><%= link_to "ログイン", new_user_session_path %></li>
<% end %>
さらに、その下の</ul>のあとに、
<% if user_signed_in? %> Logged in as <strong><%= current_user.email %></strong>. <% end %>
も追加しましょう。
これで、動作確認してみましょう。
deleteへのアクセス制限
app/controllers/nicknames_controller.rbの最初の方に
before_action :authenticate_user!, only: :delete
を追加する。
管理者だけにするには?
簡便な方法ですので、リリースするようなアプリケーションでは、 別途方法を検討すべきですが、Rubyが使えれば下記のような書き換えで、 管理者だけにすることでもできます。
app/views/layouts/application.html.erbを開きulの内部を下記のように変えてみましょう。 ユーザhosokawa@keiei.shikoku-u.ac.jpだけに削除できるようになります。
<li><%= link_to "トップページ", '/nicknames/show' %></li> <% if user_signed_in? %> <li><%= link_to "ニックネーム登録", '/nicknames/create' %> <% if current_user.email == 'hosokawa@keiei.shikoku-u.ac.jp' %> <li><%= link_to "ニックネーム削除", '/nicknames/delete' %></li> <% end %> <li><%= link_to 'プロフィール変更', edit_user_registration_path %></li> <li><%= link_to "ログアウト", destroy_user_session_path, method: :delete %></li> <% else %> <li><%= link_to "ログイン", new_user_session_path %></li> <li><%= link_to "ユーザ登録", new_user_registration_path %></li> <% end %> </ul> <% if user_signed_in? %> <div class="right"> <strong class="right"><%= current_user.email %></strong>でログインしています。 </div> <% end %>