1
0

More than 3 years have passed since last update.

さくっとdeviseをつかってみる

Last updated at Posted at 2021-05-28

前回の続き

では前回でdeviseの導入までは終わっていると思いますので、実際にdeviseをつかっていきましょう!

まだdeviseの導入が終わってない方はこちらから
deviseのかんたん導入手順

ルーティングの設定

マイグレーションできたらconfig/routes.rbにルーティングが追加されているはずです。

rootパスも追加しましょう。

config/routes.rb
Rails.application.routes.draw do
  devise_for :users
  root to: 'homes#index'
end

deviseのストロングパラメータを設定

追加したnameカラムがデフォルトでは設定されていないので、before_actionを使ってdeviseの機能が使われる前に実行されるようにします。

deviseのコントローラーは、直接修正できないので、application_controller.rbに書きます

app/controllers/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でもログインしたいので、フォームを追加します。

app/views/devise/registrations/new.html.erb
<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タグをつくり、その中に書いていきます。

app/views/layouts/application.html.erb
<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を使う機会は多いと思いますので、徐々に慣れていきましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0