前回の続き
では前回でdeviseの導入までは終わっていると思いますので、実際にdeviseをつかっていきましょう!
まだdeviseの導入が終わってない方はこちらから
deviseのかんたん導入手順
ルーティングの設定
マイグレーションできたらconfig/routes.rb
にルーティングが追加されているはずです。
rootパスも追加しましょう。
Rails.application.routes.draw do
devise_for :users
root to: 'homes#index'
end
deviseのストロングパラメータを設定
追加したnameカラムがデフォルトでは設定されていないので、before_action
を使ってdeviseの機能が使われる前に実行されるようにします。
deviseのコントローラーは、直接修正できないので、application_controller.rb
に書きます
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
endend
deviseのビューをカスタマイズする
deviseではデフォルトでビューが用意されていますが、そのままだとEmailとpasswordのみでの新規登録画面になるので、カスタマイズしていきます。
ターミナルで下記実行
$ rails g devise:views
するとdevise機能に関連付けられたさまざまな、ビューが作られました。
新規登録画面はapp/views/devise/registrationsのnew.html.erb
にあります。
nameでもログインしたいので、フォームを追加します。
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
:
:
/users/sign_upへアクセスしてもらうと、nameとemailで新規登録できる画面ができていると思います。
ログアウト機能
新規登録後はログイン状態になります。
このままだとずっとログイン状態のままなので、ログアウト機能をつけます。
app/views/layouts/application.html.erb
のbody内にheaderタグをつくり、その中に書いていきます。
<body>
<header>
<% if user_signed_in? %>
<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 %>
</header>
<main>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</main>
</body>
<% if user_signed_in? %>
はdeviseで用意されているヘルパーです。
ログインしてるときに、表示したいものを<% if user_signed_in? %>
から<% else %>
に、
ログインしていないときに、表示したいものを<% else %>
から<% end %>
に書きます。
mainタグの中の<p class="notice"><%= notice %></p>
と<p class="alert"><%= alert %></p>
は、ログインに成功したとき、失敗したときに、フラッシュメッセージを表示できます。
デフォルトでは、新規登録、ログイン、ログアウト後は、rootパスに遷移します。
まとめ
これでdeviseの基本的は実装は完成です。
とても簡単だったと思います。
deviseを使うことでここまで簡単に、ユーザー認証機能がつくれます。
コントローラーやモデルの設計も特になにもせず、動作する状態になるのでとても便利だったと思います。
ただdeviseの中はブラックボックスになっていて、真の理解をするためには、まだまだ使いこなしていかなければなりません。
railsでdeviseを使う機会は多いと思いますので、徐々に慣れていきましょう!