1
3

More than 1 year has passed since last update.

#1 ユーザー認証、ログイン機能

Posted at

はじめに

自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #1 のログイン機能になります。
#0と#0.5も記事にしてますので、準備段階から見たい方はそちらを参照してください。

目次

1.gem 'devise'をインストール、初期設定
2.ユーザーテーブル作成、マイグレーションファイル編集
3.deviseのstrong parametersを設定
4.ユーザーの登録画面の編集、ログアウトボタンの追加
5.ログインの遷移先設定、遷移先のページ作成

1.gem 'devise'をインストール、初期設定

Gemfile
gem 'devise'

Gemfileにdeviseを追加。(最下部に追加)

username:~/environment/snow-review $ bundle install

bundle installを行い、アプリケーションに読み込ませる。

username:~/environment/snow-review $ rails g devise:install

deviseの初期設定を行い、deviseを使う準備が整いました。

2.ユーザーテーブル作成、マイグレーションファイル編集

username:~/environment/snow-review $ rails g devise:user

通常だと rails g model モデル名だが、
devise使用時は、rails g devise モデル名 になる。
ユーザーテーブルを作成し、マイグレーションファイルを編集

db/migrate/~~devise_create_users.rb
      t.string :name
      #以下3つは今回関係ないカラム
      t.text :introduction
      t.integer :status
      t.boolean :is_valid, defalut: "true"

name(=名前)のカラムを追加。
他の3つは以後使うカラムなので、今回は特に関係ないカラムです。

username:~/environment/snow-review $ rails db:migrate

データベースへマイグレーションを行い、Usersテーブルの作成が完了です。

3.deviseのstrong parametersを設定

/controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end

deviseのストロングパラメーターを設定。
deviseのcontrollerはライブラリで用意されるので、直接記述できない為、application_controller.rbに記述

4.ユーザーの登録画面の編集、ログアウトボタンの追加

username:~/environment/snow-review $ rails g devise:views

devise用意されたデフォルトの画面を編集する為に、ビューファイルを作成する。

今回は、新規登録のページに名前の欄を追加したいので、devise/registrations/new.html.erbを編集する。

~/devise/registratoins/new.html.erb
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>

/users/sign_inページに名前の欄が追加されているのが確認できる。
(rails s して確認してみてね!)

だが、今のままだとログインしたままの状態になってしまうので、ヘッダーにロウアウトボタンを作成する。
ついでにログイン前の時は、新規登録ページとログインページへのリンクを作成する。

/views/layouts/application.html.erb
<body>
    <% 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 %>
    <%= yield %>
  </body>

これでログインの機能が完成しました。
最後にログイン後の遷移するページの指定と、そのページの作成を行なっていきます。

5.ログインの遷移先設定、遷移先のページ作成

/controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?

  # ログイン後の遷移先
  def after_sign_in_path_for(resource)
    user_path(current_user)
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end

deviseのstrong parametersを設定した場所に、ログイン後の遷移先の設定も記述する。
今回は、usersのマイページに遷移するように設定してるので、userのマイページ(showページ)も作成していきたいと思う。

ーーusers/showページ作成ーー

① rails g controller users
→ users controllerが作成される。showアクションを記述。
② views/usersに show.html.erbを作成
→ 中身を適当に作成。
③ /config/routes.rb に show.html.erbまでのルーティングを記述する。
→ resources :users, only: [:show]

(get 'users/show' => 'users#show'でもいいが、後々ルーティングが増えた時にresourcesでまとめるのがいいので、resourcesで記述する。)

最後に

以上でログイン後の遷移する先のページ作成、指定が完了しました。
ログイン後の遷移先を違うページにしたい時は、application_controller.rbの中身を変えましょう!

1
3
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
3