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を適用させたかを聞いてきます。