deviseに関してのアウトプット
deviseとは?
ユーザー管理機能を簡単に実装するためのGem.
ログイン機能を1から構築するのが大変なため、deviseを使用して簡単に実装しよーよ!ということは私を含めてご存知な方は多いと思います。
たくさん使ってきましたが、色々と実装を進めていく中であまり理解をしていないことに気づきました。
自分でも分かりやすいように今回はまとめたいと思います。
どのような機能が実装できるか
- サインアップ機能
- サインイン機能
- アカウント編集機能
- パスワード変更機能
- メール認証機能
- アカウント凍結機能
凍結までできるのですね、これは知りませんでした。
導入手順
- gem 'devise' (Gemfileに記述)
- bundle install (ターミナルでディレクトリがdeviseを導入したいアプリで)
- rails s (インストールしたGemを反映させるため)
- rails g devise:install (deviseの設定ファイルを作成)
- rails g devise user (Userモデルを作成)
- rails db:migrate (必要なテーブルを記述してから実行)
- rails s (テーブル・カラムに変更があった場合)
- rails g devise:views
ここで意外だったのが、コントローラーは特別いらないこと。
今回実装しているアプリはコントローラーがいらなかったのです。
調べてもよく出てこなかったのですが、deviseに元々備わっている機能だけでアクションのようなものも付随しているってことなのかな。
元々備わっているもの
今回はマイグレーションファイルに関してだけの説明です。
t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: ""
マイグレーションファイルを確認すると. 既に記述がある項目の一つです。
アプリを開発する上でemailに一意性制約を用いたいと思い. Userモデルのバリデーションに記述しました。
validates :email, uniqueness true #混同しやすいですが、uniqueはマイグレーションファイルに使用
本当は他にも色々記述してますが.
このように記述をしました。
が、結論 要りませんでした。
deviseのemailには一意性制約がデフォルトであるため. 要りません。
deviseにより自動的に含まれているバリデーション
email
- 存在すること
- 一意であること
- @を含むこと
password
- 存在すること
- 6文字以上128文字以下であること
今回はモデルに記述した箇所を削除して. エラー文の重複に悩んでましたが、解決しました。