Rails:gem 'devise' の使い方

# <br>gem 'devise' の使い方を復習していく。<br>   
#### 'devise'のgemはrailsでログイン機能を簡単に実装するためのgem。

## Gemfileを以下の様に編集
```ruby:Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

# 省略

gem 'devise'      #最終行に追記。
```
> <br>`$ pwd` ディレクトリを確認する。<br>`$ bundle install` Gemfileに追記したdeviseをインストール。<br>＊ログに（Installing devise 4.7.0）みたいなのが出ていればインストールできている。   

## ローカルサーバーの再起動
> `control + C` で一度サーバー終了<br>`$rails s` で再度サーバー起動

## deviseの設定ファイル作成
#### deviseの使用するためには、Gemのインストールと専用コマンドを使用して<br>設定ファイルを作成する必要がある。
> `$rails g devise:install` 設定ファイルの作成<br><br>新規作成されるファイル<br>•　config/initializers/devise.rb
•　config/locales/devise.en.yml

## deviseの機能を持ったモデルの作成
#### モデルの作成には通常のコマンドではなく、deviseのモデルを作成する<br>専用のコマンドを使用してモデルを作成する。
> `$ rails g devise user` userモデルを作成する。<br><br>新規作成されるファイル<br>•　app/models/user.rb<rb>
•　test/fixtures/users.vml<br>•　test/models/user_test.rb<br>•　db/migrate/20XXXXXXXXXXXX___devise_create___users.rb
#### <rb>config/routes.rbに下記の様な記述が自動的に追記される。
```ruby:config/routes.rb
Rails.application.routes.draw do
  devise_for :users   #この部分が追記される
# 省略
```
<rb>`$ rails db:migrate` usersテーブルの作成。

## Viewの作成
#### deviseでログイン機能を実装すると`user_signed_in? メソッド`が使用できる。<br>ユーザーがサインインしている時は`true`を返して、サインインしていない時は`false`を返す。<br>`user_signed_in? メソッド`を使用して、ログイン・新規登録・ログアウトボタンを作成していく。<br>
```sample.html.erb
<% if user_signed_in? %>
  # ログインしている時の処理
<% else %>
  # ログインしていない時の処理
<% end %>
```
#### 下記の様にボタンを適当なviewに追記。
```sample.html.erb
<div class="header">
  <% if user_signed_in? %>
    <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "header__btn" %>
  <% else %>
    <%= link_to "ログイン", new_user_session_path, class: "header__btn" %>
    <%= link_to "新規登録", new_user_registration_path, class: "header__btn" %>
  <% end %>
</div>
```
#### 次にdevise用のviewを作成する。<br>
> `$ rails g devise:views` 専用コマンドでログイン画面・新規登録画面が作成される。<br><br>新規作成されるファイル<br>•　app/views/devise以下のディレクトリにある各種ビューファイル。

#### 新規登録画面:  app/views/divise/registrations/new.html.erb<br><br>ログイン画面:  app/views/devise/sessions/new.html.erb<br><br>再度ローカルサーバーを再起動して動作確認して終了。
## <br>configure_permitted_parameters メソッド
#### deviseはデフォルトで、メールアドレス・パスワードしか受け取れない様にストロングパラメーターが設定されている。<br>`configure_permitted_parameters メソッド`を設定して、追加のパラメーターを許可しなければならない。
> つまり、初期状態だと新規登録画面でメールアドレスとパスワードしか登録できない。<br>ニックネームやその他の情報を登録したかったら設定をいじる必要がある。

## ニックネームを登録できる様にする
#### まずはusers テーブルにnicknameカラムを追加する。
> `$ rails g migration AddNicknameToUsers nickname:string`<br>`$ rails db:migrate`

#### 新規登録画面で nickname を登録できる様にする。<br>
```app/views/devise/registrations/new.html.erb
<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render "devise/shared/error_messages", resource: resource %>

# 以下を追記
  <div class="field">
    <%= f.label :nickname %><br />
    <%= f.text_field :nickname, autofocus: true %>
  </div>

# 省略
```
#### configure_permitted_parameters メソッドの設定
```ruby:app/controllers/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
```
#### 動作確認して終了。