gem deviseとの格闘

 まだtutorialは全く終わっていませんが、現実逃避としてオリジナルアプリの制作にとりかかっている今日このごろ。その第一歩として、ログイン機能をまずつけることにしました。

 Progateではログイン機能を自分で作っていきましたが、gemの中にdeviseというログイン機能に特化したものがあるようなのでそれを用いることにしました。

 

今回のdevise導入の参考として利用させていただいたのはこれです!!

[*Rails*] deviseの使い方(rails5版)

 本当にわかりやすくてありがたかったです。今回はTwitter認証はやらなかったのでその部分は飛ばしています。(本当は認証を導入しようとしていたのですが、色々あって断念しました。コールバックのURLはしっかりとrails routes で調べて登録しましょう笑。)

gemfileにdeviseを書き込み。

bundle install

rails g devise:install

その後、英文の説明に沿って、デフォルトのURLを設定、root_urlを指定、flashメッセージの設定、deviseのviewファイルを生成(rails g devise:views)しました。

 

続いて、Userモデルを作るために

rails g devise Userを実行し、rake db:migrateでDBに反映。

 

しかし、このままではユーザー登録時に入力するものがemailとpasswordだけになってしまう。僕はどうしてもusernameも欲しかったのでそれも加えることに。

 

・usersテーブルにusernameカラムを追加
rails g migration add_username_to_users username:string
rake db:migrate

 

・viewファイルにusername用の入力フィールドを作る

<div class="field">
  <%= f.label :username %>
  <%= f.text_field :username, autofocus: true %>
</div>

 views/devise/registrations/new.html.erbとedit.html.erbに上の記述を追加。

 

最後にストロングパラメータというよくわからんものにusernameも受け取ってくださいというお願いをする。(たぶんそういうことなのだろう。)

applicationcontrollerに以下の記述を貼り付けるだけでいいようです。

class ApplicationController < ActionController::Base
 protect_from_forgery with: :exception
 before_action :configure_permitted_parameters, if: :devise_controller?

# 省略

 protected
 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  devise_parameter_sanitizer.permit(:account_update, keys: [:username])
 end
end

 

 

 

格闘中に非常に役立った仲間たち

・git checkout . (変更したファイルを変更前の状態に戻す。ただし、初期のブランチに存在しないファイルは消えずに存在し続ける)

・rm -rf `git status --short | grep '??' | awk '{print $2}'` (意味は全くわかっていないが、初期のブランチに存在しないファイルを消去してくれるらしい)

・rake db:reset(DBの初期化、rollback前にファイルの状況をもとに戻してしまったときにお世話になった)