今回はdeviseを使ったユーザー登録の流れを!
忘れないように自分用です。
deviseとは
ユーザー管理機能を簡単い実相するためのgem。
Gemfileに追記する
gem 'devise
を最終行に追記。
その後、プロジェクトディレクトリで
bundle install
deviseの設定ファイルを作成。
ターミナル
$ rails g devise:install
・config/initializers/devise.rb
・config/locales/devise.en.yml
上記のファイルが作成される。
deviseの機能を持ったUserモデルを作成。
deviseを利用する際にはアカウントを作成するためのUserモデルを新しく作成します。通常のモデルの作成方法ではなく、devisdeのモデル作成用コマンドで作成。
①userモデルの作sでい
ターミナル
$ rails g devise user
・app/models/user.rb
・db/migrate/20XXXXXXXXXXXX_devise_create_users.rb
・test/fixtures/users.yml
・test/models/user_test.rb
上記ファイルが自動で作成され、config/routes.rbに以下の記述がされる。
Rails.application.routes.draw do
devise_for :users```
この記述により、ログイン・新規登録に必要なルーティングが生成されます。
②userテーブルの作成
ターミナル
```$ rails db:migrate```
userテーブルが作成されているのを確認できればOK!
# 新規登録/ログインの実装
手順は以下の通り、
1.未ログイン時のボタン設定
2.未ログイン時・ログイン時でボタン表示の変更
3.devise用のビューを作成する
1.未ログイン時のボタン設定については、ビューの装飾を変更するだけなので割愛。
# 2.未ログイン時・ログイン時でボタン表示の変更
こちらを変更できようにするのが、user_signed_in?メソッド
# user_signed_in?メソッドとは
deviseでログイン機能を実相する際に使用できるメソッドで、ユーザーがサインインしているかどうかを検証するためのメソッドです。
サインインしている場合はtrueで返し、サインインしていない場合は、falseで返します。
```<% if user_signed_in? %>
<%= link_to "新規投稿", [prefix], class: "" %>
<%= link_to "ログアウト", [prefix], method: :delete, class: "" %>
<% end %>```
user_signed_in?が返す値は最終的に、trueかfalseになるおで、上記の例のようにif文またはunless文とともに使用します。
# devise用のビューを作成
deviseのコマンドを利用してビィーファイルを生成すると、簡単い新規登録画面とログイン画面が作成できます。
ターミナル
```$ rails g devise:views```
新規登録画面:app/views/devise/registrations/new.html.erb
ログイン画面:app/views/devise/sessions/new.html.erb
というビューファイルが対応。
# ユーザー名も登録できるようにする。
deviseの初期状態では、nicknameカラムは作成されないため、もし必要であれば以下のコマンドでuserテーブルにnicknameカラムを作成する。
```# usersテーブルにnicknameカラムをstring型で追加するマイグレーションファイルを作成
$ rails g migration AddNicknameToUsers nickname:string```
```# マイグレーションファイルの実行
$ rails db:migrate```
# configure_permitted_parametersメソッド
deviseの初期状態でサインアップ時にメールアドレスとパスワードのみ受け取るようにストロングパラメーターが設定してあるので、上記で追加したキー(nickname)のパラメーターは許可されていない。
追加のパラメーターを許可したい場合は、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: [:nickname])
end
end```
# current_userメソッド
current_userメソッドは、deviseのヘルパーメソッドで、ログイン中のユーザー情報を取得できる。
idを取得したい場合、```current_user.id```記述