#1 ユーザー認証、ログイン機能

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #1 のログイン機能になります。
 #0と#0.5も記事にしてますので、準備段階から見たい方はそちらを参照してください。

#目次
1.gem 'devise'をインストール、初期設定
2.ユーザーテーブル作成、マイグレーションファイル編集
3.deviseのstrong parametersを設定
4.ユーザーの登録画面の編集、ログアウトボタンの追加
5.ログインの遷移先設定、遷移先のページ作成

##1.gem 'devise'をインストール、初期設定
```ruby:Gemfile
gem 'devise'
```
Gemfileにdeviseを追加。(最下部に追加)

```Ruby
username:~/environment/snow-review $ bundle install
```
bundle installを行い、アプリケーションに読み込ませる。

```Ruby
username:~/environment/snow-review $ rails g devise:install
```
deviseの初期設定を行い、deviseを使う準備が整いました。

##2.ユーザーテーブル作成、マイグレーションファイル編集
```Ruby
username:~/environment/snow-review $ rails g devise:user
```
通常だと rails g model モデル名だが、
devise使用時は、rails g devise モデル名　になる。
ユーザーテーブルを作成し、マイグレーションファイルを編集

```Ruby:db/migrate/~~devise_create_users.rb
      t.string :name
      #以下3つは今回関係ないカラム
      t.text :introduction
      t.integer :status
      t.boolean :is_valid, defalut: "true"
```
name(=名前)のカラムを追加。
他の3つは以後使うカラムなので、今回は特に関係ないカラムです。

```Ruby
username:~/environment/snow-review $ rails db:migrate
```
データベースへマイグレーションを行い、Usersテーブルの作成が完了です。

##3.deviseのstrong parametersを設定

```Ruby:/controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
```
deviseのストロングパラメーターを設定。
deviseのcontrollerはライブラリで用意されるので、直接記述できない為、application_controller.rbに記述


##4.ユーザーの登録画面の編集、ログアウトボタンの追加
```Ruby
username:~/environment/snow-review $ rails g devise:views
```
devise用意されたデフォルトの画面を編集する為に、ビューファイルを作成する。

今回は、新規登録のページに名前の欄を追加したいので、devise/registrations/new.html.erbを編集する。

```Ruby:~/devise/registratoins/new.html.erb
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>
```
/users/sign_inページに名前の欄が追加されているのが確認できる。
(rails s して確認してみてね！)

だが、今のままだとログインしたままの状態になってしまうので、ヘッダーにロウアウトボタンを作成する。
ついでにログイン前の時は、新規登録ページとログインページへのリンクを作成する。

```Ruby:/views/layouts/application.html.erb
<body>
    <% if user_signed_in? %>
      <li>
        <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
      </li>
    <% else %>
      <li>
        <%= link_to "新規登録", new_user_registration_path %>
      </li>
      <li>
        <%= link_to "ログイン", new_user_session_path %>
      </li>
    <% end %>
    <%= yield %>
  </body>
```

これでログインの機能が完成しました。
最後にログイン後の遷移するページの指定と、そのページの作成を行なっていきます。


##5.ログインの遷移先設定、遷移先のページ作成

```Ruby:/controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?

  # ログイン後の遷移先
  def after_sign_in_path_for(resource)
    user_path(current_user)
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
```
deviseのstrong  parametersを設定した場所に、ログイン後の遷移先の設定も記述する。
今回は、usersのマイページに遷移するように設定してるので、userのマイページ(showページ)も作成していきたいと思う。
###ーーusers/showページ作成ーー
① rails g controller users
→ users controllerが作成される。showアクションを記述。
② views/usersに show.html.erbを作成
→ 中身を適当に作成。
③ /config/routes.rb に show.html.erbまでのルーティングを記述する。
→ resources :users, only: [:show] 

(get 'users/show' => 'users#show'でもいいが、後々ルーティングが増えた時にresourcesでまとめるのがいいので、resourcesで記述する。)

##最後に
以上でログイン後の遷移する先のページ作成、指定が完了しました。
ログイン後の遷移先を違うページにしたい時は、application_controller.rbの中身を変えましょう！