#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #1 のログイン機能になります。
#0と#0.5も記事にしてますので、準備段階から見たい方はそちらを参照してください。
#目次
1.gem 'devise'をインストール、初期設定
2.ユーザーテーブル作成、マイグレーションファイル編集
3.deviseのstrong parametersを設定
4.ユーザーの登録画面の編集、ログアウトボタンの追加
5.ログインの遷移先設定、遷移先のページ作成
##1.gem 'devise'をインストール、初期設定
gem 'devise'
Gemfileにdeviseを追加。(最下部に追加)
username:~/environment/snow-review $ bundle install
bundle installを行い、アプリケーションに読み込ませる。
username:~/environment/snow-review $ rails g devise:install
deviseの初期設定を行い、deviseを使う準備が整いました。
##2.ユーザーテーブル作成、マイグレーションファイル編集
username:~/environment/snow-review $ rails g devise:user
通常だと rails g model モデル名だが、
devise使用時は、rails g devise モデル名 になる。
ユーザーテーブルを作成し、マイグレーションファイルを編集
t.string :name
#以下3つは今回関係ないカラム
t.text :introduction
t.integer :status
t.boolean :is_valid, defalut: "true"
name(=名前)のカラムを追加。
他の3つは以後使うカラムなので、今回は特に関係ないカラムです。
username:~/environment/snow-review $ rails db:migrate
データベースへマイグレーションを行い、Usersテーブルの作成が完了です。
##3.deviseのstrong parametersを設定
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.ユーザーの登録画面の編集、ログアウトボタンの追加
username:~/environment/snow-review $ rails g devise:views
devise用意されたデフォルトの画面を編集する為に、ビューファイルを作成する。
今回は、新規登録のページに名前の欄を追加したいので、devise/registrations/new.html.erbを編集する。
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true %>
</div>
/users/sign_inページに名前の欄が追加されているのが確認できる。
(rails s して確認してみてね!)
だが、今のままだとログインしたままの状態になってしまうので、ヘッダーにロウアウトボタンを作成する。
ついでにログイン前の時は、新規登録ページとログインページへのリンクを作成する。
<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.ログインの遷移先設定、遷移先のページ作成
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の中身を変えましょう!