Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【Rails】deviseまとめ

こんにちは😊Kintarouです。

現在エンジニア転職を目指してTECH CAMPにてプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人が働きやすいシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回はRailsのユーザー機能に使われるGem。『devise』についてまとめてみます!

github.com

deviseとは

RubyのGemの一つで、導入する事でユーザー機能を簡単に実装できます。

導入方法

導入するアプリケーションのGemfileに記述します。

#最下部  
gem 'devise'

ターミナルにて、導入したアプリケーションのディレクトリに移動し以下を1行ずつ実行

% rails g devise: install
% rails g devise user

db/migrate ファイル内にマイグレーションファイルが作成されました。
初期はemailとpasswordのカラムのみなので、ユーザー名(name)やニックネーム(nickname)など新たに設定したい場合はここで記入。
完了後マイグレーションを行う。

% rails db:migrate

これで導入完了です。
ローカルサーバーを起動した状態でhttp://localhost:3000/users/sign_insign_upにアクセスするとログインページに飛ぶことがわかります。

undefined method `devise' for 〜のエラーが出た場合

稀に起こるエラーです。deviseは自動で定義されているものなので、一度サーバーを再起動してもう一度更新してみましょう。

deviseのビューを作成

deviseにはあらかじめビューファイルが用意されていますが、ユーザー名(name)は自作したカラムなので登録フォームも自作する必要があります。
自作するために、deviseのビューファイルをディレクトリにおろしてきましょう。

% rails g devise:views

上記のコマンドで、app/viewsファイル内にdeviseファイルが作成され、その中に
- registrations(サインアップ画面)
- sessions(ログイン画面)
が作成されました。

これを編集することで、レイアウトを変更できます。

deviseのストロングパラメーターを使えるようにする

deviseのストロングパラメーターの記述はGem内にあるため、通常の方法ではストロングパラメーターを設定できません。

もし設定する場合は、app/controllers/application_controller.rbのファイルに
"configure_permitted_parameters"というメソッドを定義します。

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?    #deviseに関する処理の場合にメソッドを実行

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])    #サインアップ時にnameカラムも取得する
  end
end

deviseを一度消して再導入したい時

deviseを一度設定したが、不明な不具合などにより一度消して再導入したい時についてをまとめます。
まずはupになっているマイグレーションファイルがある場合、downにしておきましょう。

一度消す場合は導入手順をrails dコマンドで遡っていけばOKです。

% rails g devise:install
% rails g devise user
% rails g devise:views
% rails db:migrate

#の順で導入したので遡って

% rails db:rollback
% rails d devise:views
% rails d devise user
% rails d devise:install

これでdeviseを削除することで、またrails g devise:installから再導入できます。

deviseを導入することで使えるヘルパーメソッド

こちらは以下の記事を参考にさせていただいてます🙇‍♂️

qiita.com

メソッド 用途
before_action :authenticate_user! コントローラーに設定して、ログイン済ユーザーのみにアクセスを許可する
user_signed_in? ユーザーがサインイン済かどうかを判定する
current_user サインインしているユーザーを取得する
user_session ユーザーのセッション情報にアクセスする

以上。どなたかの参考になれば幸いです。