#deviseの導入とデフォルトについて
- deviseの導入
- deviseのデフォルト
##Why
###deviseに関する記事を調べた時にdeviseのコントローラーを作る記事しかなく、application.controllerのみで完結させたかったから。また、その際にdeviseがデフォルトで持つ範囲を知らなく、余計なカラムやvalidationを記述していた為エラーの解決に時間がかかったのでこれを参考にしていただければと思います。
#devise導入
gem 'devise'
# 現在のディレクトリが~/projects/pictweetであることを確認
% pwd
# Gemをインストール
% bundle install
# サーバーを起動
% rails s
# deviseの設定ファイルを作成
% rails g devise:install
# deviseコマンドでUserモデルを作成
% rails g devise user
###以下のようにdevise_for :usersが入っていればOK!
Rails.application.routes.draw do
devise_for :users
root to: 'tweets#index'
resources :tweets
end
###次はテーブルの作成
# マイグレーションを実行
% rails db:migrate
###データベースにテーブルが作成されていればOK!
###最後に下記も忘れずに!
# 「ctrl + C」でローカルサーバーを終了
# 再度、ローカルサーバーを起動
% rails s
##これで一通りdeviseの導入が終わったので、あとは好きなように実装するだけです。
#今回はデフォルトについてです!!!
##こちらはあまり関係ないのですが、validatesでname,email,passwordしかかけておらずデータベースを確認するとpasswordの部分がencrypted_passwordでカラムとして登録してあります。「validatesにencrypted_passwordがないよ?」と突っ込みたいところですがencrypted_passwordはパスワードを暗号化してテーブルに保存するというものなのでvalidatesはpasswordをかけるだけでok。ちなみにpassword_confirmationとかもvalidatesをかけなくてok。
#話が脱線してしまいましたがこちら
##13行目に注目。
###deviseをインストールすることでdevise_parameter_sanitizerメソッドが使えるようになります。deviseでユーザー登録をする場合に使用でき、「特定のカラムを許容する」メソッドになります。このメソッドにdevise_parameter_sanitizerメソッドを定義します。
##devise_parameter_sanitizerメソッド
###permitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができます。なのでノーマルな新規登録、ログイン機能くらいであればわざわざdeviseのコントローラーを作らなくてもapplication.contoroller内で完結できちゃいます。(新規登録などで複数ページに渡って遷移させる場合ちゃんとcontrollerを作った方がいい)
private
def configure_permitted_parameters # メソッド名は慣習
# deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
##14行目に注目!
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
###keys:の後に続く[ ]内に:nameの他に本来:emailや:passwordなどを入れなければいけません。ですがdeviseのデフォルトで裏で勝手に処理してくれているのでここは:nameだけでok!
#余談
##バリデーションのデフォルト解除方法
##これを
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
##こうするだけ!
devise :database_authenticatable, :registerable,
:recoverable, :rememberable
#まとめ
deviseは簡単に導入できて、簡単に新規登録やログイン、ログアウト機能を実装できる素晴らしいgemですが、それだけ便利すぎる裏では様々なデフォルトが勝手に反映されてしまって余計なエラーなどが起きやすくなるのでせめてもの簡単なデフォルトの紹介をさせて頂きました。