deviseを使う際の初期設定

39日目です。
deviseを使用する際に使うコマンドなどを紹介します。 また、本日の実装で躓いた点もあるので併せて記載します。

deviseとは

Railsで作成したアプリケーションへ簡単に認証機能
(サインアップ・サインイン・ログアウト・アカウント編集機能など)
を実装することができる、gem(ライブラリ)の一つ。

deviseの具体的な使用方法

1.Gemfile下部に下記を記載

    gem 'devise'

2.gemのインストール(ターミナル )
bundle install

インストールが成功しました。 Bundle complete! 19 Gemfile dependencies, 83 gems now installed.
Use bundle info [gemname] to see where a bundled gem is installed.

3.gemの反映の為にローカルサーバーを再起動(ターミナル )
control + c → rails s

4.deviseを使うのに必要なファイルを生成(ターミナル )
rails g devise:install

下記の2つが作られました。
create config/initializers/devise.rb
create config/locales/devise.en.yml

5.ユーザーモデルの作成(ターミナル )
rails g devise user

以下が作成されます
invoke active_record
create db/migrate/20190801142222_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
一番下の「devise_for :users」ですが、routes.rbに自動的に記載されます。

    Rails.application.routes.draw do
      devise_for :users
      resources :tweets
    end

これが作られたことで、current_userやuser_signed_in?
などのヘルパーメソッドが利用できるようになります。

6.マイグレーションファイルの編集
201908011142222_devise_create_users.rbにnameカラムを追記

    class DeviseCreateUsers < ActiveRecord::Migration[5.2]
      def change
        create_table :tweets do |t|
            t.string :name,               null: false, default: ""
            t.string :email,              null: false, default: ""
            t.string :encrypted_password, null: false, default: ""
            # 省略
        end
         # 省略
      end
    end

7.データベースに反映(ターミナル)
bundle exec rake db:migrate

usersテーブルが作られました。 == 20190801142222 DeviseCreateUsers: migrating ================================
-- create_table(:users)
-> 0.0019s
-- add_index(:users, :email, {:unique=>true})
-> 0.0008s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0010s
== 20190801142222 DeviseCreateUsers: migrated (0.0038s) =======================

8.デバイスのビューファイルを作成(ターミナル )
rails g devise:views

下記が作成されました。
  invoke Devise::Generators::SharedViewsGenerator
create app/views/devise/shared
create app/views/devise/shared/error_messages.html.erb
create app/views/devise/shared/
links.html.erb
invoke form_for
create app/views/devise/confirmations
create app/views/devise/confirmations/new.html.erb
create app/views/devise/passwords
create app/views/devise/passwords/edit.html.erb
create app/views/devise/passwords/new.html.erb
create app/views/devise/registrations
create app/views/devise/registrations/edit.html.erb
create app/views/devise/registrations/new.html.erb
create app/views/devise/sessions
create app/views/devise/sessions/new.html.erb
create app/views/devise/unlocks
create app/views/devise/unlocks/new.html.erb
invoke erb
create app/views/devise/mailer
create app/views/devise/mailer/confirmation_instructions.html.erb
create app/views/devise/mailer/email_changed.html.erb
create app/views/devise/mailer/password_change.html.erb
create app/views/devise/mailer/reset_password_instructions.html.erb
create app/views/devise/mailer/unlock_instructions.html.erb

9.サインアップ画面にname登録フォームを追記
registrations/new.html.erbにform_forの下に追記

    <div class="field">
      <%= f.label :name %><br />
      <%= f.text_field :name, autofocus: true %>
    </div>

10.nameもストロングパラメーターに設定する
(deviseはデフォルトでemailとパスワードだけしかストロングパラメータに設定していない為)
application_controller.rbに下記追加

    before_action :configure_permitted_parameters, if: :devise_controller?

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

躓いた点

上記1~3までしかやっていないのに、全てのファイルが作成されていると勘違いし、 ファイルを探してしまっていました。 特に4の「deviseを使うのに必要なファイルを生成」は通常のコントローラーや テーブル作成の流れには入ってこないことなので、忘れがちになると思います。

参考: DIVE INTO CODE | RailsにおけるDeviseとは?


明日は昨日のブログで紹介したミニアプリの発表会があるので、 他の人がどのようにCSSを適用させたかを聞いてきます。