- Gemfile に
$ gem 'devise'
を追記して、$ bundle install
する。
Devise の設定ファイルを作成し、 User モデルを作成する。
-
$ rails g devise:install
を実行して、Devise の設定ファイルを作成する。 -
$ rails g devise user
を実行して、Devise の機能を持つ User モデルを作成する。- この時に、ルーティングに
devise_for :users
という Devise の機能へリクエストするためのルーティングが生成される。
- この時に、ルーティングに
-
$ rails db:migrate
を実行して、Devise の機能を持つ User モデルをマイグレートする。 - ログイン画面等の Devise が持つビューファイルを変更したい場合は、
$ rails g devise:views
を実行してビューファイルを作成する。
メールアドレスとパスワード以外の値を受け取れるようにする。
- Devise では、メールアドレスとパスワードしか値を受け取らないようにストロングパラメータが記述されているので、任意でフォームを追加した場合には、その値を受け取れるように記述する必要がある。
_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: [:追加したフォームの名前])
end
end
ログインしている時としていない時で表示が変わるようにする。
- Devise をインストールすると、ユーザーがサインインしているかどうかを判断する
user_signed_in?
メソッドが使用できる。
.html
<% if user_signed_in? %>
<!-- ユーザーがサインインしている場合に実行する処理を記述する。 -->
<% else %>
<!-- ユーザーがサインアウトしている場合に実行する処理を記述する。 -->
<% end %>
送信したフォームの情報にサインインしているユーザーの情報を追加したい場合…
_controller.rb
class PostsController < ApplicationController
private
def post_params
params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
# form_with を使用して送信される情報を取得するストロングパラメータに .merge メソッドを使用して、current_user (現在ログインしているユーザー) の ID を結合させる。
end
end